]> git.sesse.net Git - stockfish/blobdiff - src/search.cpp
Be sure threads are woken in wake_sleeping_threads()
[stockfish] / src / search.cpp
index fbae76d7720fee3dd5833697b0b70be412428b5c..22bc0156705121a9a02adfcd8b59c1ff66e21997 100644 (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);
     }
   }