Fix again TimerThread::idle_loop() to prevent a
theoretical race with 'exit' flag in ~Thread().
Indeed in Thread d'tor we raise 'exit' and then
call notify() that is lock protected, so we
have to check again for 'exit' before going to
sleep in idle_loop().
Also same change in Thread::idle_loop() where we
now check for 'exit' before to go to sleep.
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
// particular we need to avoid a deadlock in case a master thread has,
// in the meanwhile, allocated us and sent the wake_up() call before we
// had the chance to grab the lock.
- if (!is_searching && Threads.sleepWhileIdle)
+ if (!is_searching && !do_exit)
sleepCondition.wait(mutex);
mutex.unlock();
while (!do_exit)
{
mutex.lock();
- do sleepCondition.wait_for(mutex, msec ? msec : INT_MAX);
- while (!msec && !do_exit); // Don't allow wakeups when msec = 0
+
+ if (!do_exit)
+ sleepCondition.wait_for(mutex, msec ? msec : INT_MAX);
+
mutex.unlock();
- check_time();
+ if (msec)
+ check_time();
}
}