mirror of
https://github.com/sockspls/badfish
synced 2025-04-30 08:43: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:
parent
093dd8fe88
commit
8a504d36f9
1 changed files with 10 additions and 1 deletions
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue