Issue 5722: settimer / gettimer functionality on FreeBSD 6.3 (not 7.x) (original) (raw)
Tests fail on FreeBSD 6.3
http://www.python.org/dev/buildbot/trunk/x86%20FreeBSD%203%20trunk/build s/77/step-test/0
Relevant extract from parent issue, post by Guilherme Polo:
Trent Nelson kindly gave me access to his FreeBSD 6.2 buildbot so I had chance to do some tests. The problem happens when Python is built against or libc_r, or if you are using libmap you won't need to recompile but the problem still happens when using libc_r.
I started searching in the FreeBSD bug tracker and found this issue: http://www.freebsd.org/cgi/query-pr.cgi?pr=threads/49087 which seems very similar to the problem related here.
I've also done a very simple "test" in C, just to demonstrate that this issue isn't related to Python at all:
#include <stdio.h> #include <signal.h> #include <sys/time.h>
void h(int signo) { struct itimerval t;
getitimer(ITIMER_PROF, &t);
printf("%d %d\n", t.it_value.tv_sec, t.it_value.tv_usec);
printf("deactive ITIMER_PROF\n");
t.it_value.tv_sec = 0;
t.it_value.tv_usec = 0;
setitimer(ITIMER_PROF, &t, &t);
}
int main(void) { struct itimerval ival;
ival.it_value.tv_sec = 1;
ival.it_value.tv_usec = 0;
ival.it_interval.tv_sec = 1;
ival.it_interval.tv_usec = 0;
signal(SIGPROF, h);
printf("%d\n", setitimer(ITIMER_PROF, &ival, NULL));
alarm(2);
while (1) {
getitimer(ITIMER_PROF, &ival);
if (ival.it_value.tv_sec == 0 && ival.it_value.tv_usec == 0)
break;
}
return 0;
}
When I compile this using -lc_r then the callback "h" is never called and then the alarm is fired. Compiling against pthread, thr or nothing (since this example doesn't need any threading library) doesn't demonstrate this problem and all is fine (callback "h" is invoked, infinite loop finishes and test returns 0).
Should further discussion be moved to python-dev ? I'm somewhat stuck on how to resolve this, besides saying to upgrade to FreeBSD 7 which uses libthr by default.
I've just built (using ./configure; make) 3.1a on FreeBSD 6.4 amd64. libpthread is used by the resulting binary, not libc_r, according to ldd.
I would expect then that explicit action is required to use libc_r, and given that FreeBSD people have indicated that it is deprecated and no fixes are likely to be made, I would suggest documenting this as a "don't do that" (ie use -lc_r) and close this as "won't fix".
The README file in the root of the source tree would seem an appropriate place for such documentation, though I note that there appears to be a lot of out of date information in there already...
I am following Andrew's suggestion. This issue can serve as 'don't do that' doc.
The 3.2 README has been edited and slimmed down by Georg Brandl. It is limited to general build instructions. It would not be the place for such a nit. It does say "You can pass many options to the configure script; run "./configure --help" to find out more." I do not know if that gives system specific hints.
It seems to me that the wiki might be a place for system-specific instructions, with a page like BuildingWithFreeBSD, etc.