1
0
Fork 0
mirror of https://github.com/sockspls/badfish synced 2025-04-30 16:53:09 +00:00

Be sure threads are woken in wake_sleeping_threads()

Wait inside wake_sleeping_threads() for the threads to be
effectively and reliably woken up.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
This commit is contained in:
Marco Costalba 2010-02-13 12:02:34 +01:00
parent 093dd8fe88
commit 8a504d36f9

View file

@ -2793,9 +2793,12 @@ namespace {
#else
WaitForSingleObject(SitIdleEvent[threadID], INFINITE);
#endif
Threads[threadID].sleeping = false;
}
// Out of the while loop to avoid races in case thread is woken up but
// while condition still holds true so that is put to sleep again.
Threads[threadID].sleeping = false;
// If this thread has been assigned work, launch a search
if (Threads[threadID].workIsWaiting)
{
@ -3051,6 +3054,8 @@ namespace {
{
for (int i = 1; i < ActiveThreads; i++)
{
assert(Threads[i].sleeping == true);
Threads[i].idle = true;
Threads[i].workIsWaiting = false;
}
@ -3063,6 +3068,10 @@ namespace {
for (int i = 1; i < THREAD_MAX; i++)
SetEvent(SitIdleEvent[i]);
#endif
// Wait for the threads to be all woken up
for (int i = 1; i < ActiveThreads; i++)
while (Threads[i].sleeping);
}
}