fix lost signals in cond vars
authorRich Felker <dalias@aerifal.cx>
Mon, 26 Sep 2011 16:54:28 +0000 (12:54 -0400)
committerRich Felker <dalias@aerifal.cx>
Mon, 26 Sep 2011 16:54:28 +0000 (12:54 -0400)
commit1fa05210100caefc8546746e08358d81739f4b41
treef54a70f0e4c82aa215307a3b2f4eb026115b6311
parentfd142e5ec44aaafffbb8bb4ea41c4288d3fa937a
fix lost signals in cond vars

due to moving waiters from the cond var to the mutex in bcast, these
waiters upon wakeup would steal slots in the count from newer waiters
that had not yet been signaled, preventing the signal function from
taking any action.

to solve the problem, we simply use two separate waiter counts, and so
that the original "total" waiters count is undisturbed by broadcast
and still available for signal.
src/internal/pthread_impl.h
src/thread/pthread_cond_broadcast.c
src/thread/pthread_cond_timedwait.c