В упор не понимаю фразы «Следует всегда вызывать pthread_cond_signal() под защитой мьютекса, используемого с сигнальной переменной состояния. В ином случае переменная состояния может измениться между тестированием соответствующего состояния и блокировкой в вызове pthread_cond_wait(), что может вызвать бесконечное ожидание.»
Что они имеют ввиду? Что pthread_cond_wait был вызван без использования мьютекса (передали NULL ?)