workqueue: Fix race conditions in the workqueue mechanism
From https://pubs.opengroup.org/onlinepubs/
9699919799/functions/pthread_cond_wait.html:
"The application shall ensure that these functions are called with mutex
locked by the calling thread; otherwise, an error (for
PTHREAD_MUTEX_ERRORCHECK and robust mutexes) or undefined behavior (for
other mutexes) results.
From https://pubs.opengroup.org/onlinepubs/
9699919799/functions/pthread_cond_signal.html:
"however, if predictable scheduling behavior is required, then that mutex
shall be locked by the thread calling pthread_cond_broadcast() or
pthread_cond_signal()."
Hence always hold the associated mutex around pthread_cond_wait() and
pthread_signal() calls.
This patch fixes the hangs reported by Travis and Appveyor for test case
t0013.
Signed-off-by: Bart Van Assche <bvanassche@acm.org>