-
Martin Blix Grydeland authored
The pool herder didn't signal the thread when decimating the flock, causing the thread to be leaked. Spotted by: xcir Fixes: #1490 Also close a couple of other races: When pthread_cond_timedwait returns ETIMEDOUT, the predicate (wrk->task.func == NULL) could still have changed while reacquiring the mutex. If so, the signal would've been lost and the thread leaked. Changed the idle wait loop in Pool_Work_Thread() to always check the predicate before resuming the cond_wait. The update of the predicate (wrk->task.func) from e.g. Pool_Task() is done without holding the mutex. This opens a race on the predicate, and the possibility of the worker going back on cond_wait loosing the signal. Changed to update the predicate while holding the mutex.
5c12ec5f