Andy Wingo <wi...@pobox.com> skribis: > On Sun 29 Jan 2012 19:00, l...@gnu.org (Ludovic Courtès) writes: > >> Adding printfs shows that the thread calling scm_spawn_thread leaves >> cond_wait before the signal thread has signaled the condition (in >> really_spawn). > > From > http://pubs.opengroup.org/onlinepubs/009604599/functions/pthread_cond_wait.html > > When using condition variables there is always a Boolean predicate > involving shared variables associated with each condition wait that is > true if the thread should proceed. Spurious wakeups from the > pthread_cond_timedwait() or pthread_cond_wait() functions may > occur. Since the return from pthread_cond_timedwait() or > pthread_cond_wait() does not imply anything about the value of this > predicate, the predicate should be re-evaluated upon such return. > > It seems this code is not robust in the face of spurious wakeups. I > pushed a patch that waits for data.thread to become non-false. That > should fix this issue.
Good catch, and congratulations! I can confirm that this fixes --with-thread builds on FreeBSD 8.2: http://hydra.nixos.org/build/4519811 Thanks! Ludo’.