]> git.sesse.net Git - stockfish/blobdiff - src/thread.cpp
After a "stop" do not read new input until search finishes
[stockfish] / src / thread.cpp
index e48ea6fd38e6cc22188c5fb20029353f84966309..536f22c1194cf6912eb578f550cf1d298d21d959 100644 (file)
@@ -423,6 +423,23 @@ void Thread::main_loop() {
 }
 
 
+// ThreadsManager::wait_end_of_search() blocks UI thread until main thread has
+// returned to sleep in main_loop(). It is needed becuase xboard sends immediately
+// new position to search after a "stop" due to ponder miss.
+
+void ThreadsManager::wait_end_of_search() {
+
+  Thread& main = threads[0];
+
+  lock_grab(&main.sleepLock);
+
+  while (!main.do_sleep)
+      cond_wait(&sleepCond, &main.sleepLock);
+
+  lock_release(&main.sleepLock);
+}
+
+
 // ThreadsManager::start_thinking() is used by UI thread to wake up the main
 // thread parked in main_loop() and starting a new search. If asyncMode is true
 // then function returns immediately, otherwise caller is blocked waiting for
@@ -432,11 +449,10 @@ void ThreadsManager::start_thinking(bool asyncMode) {
 
   Thread& main = threads[0];
 
-  lock_grab(&main.sleepLock);
-
   // Wait main thread has finished before to launch a new search
-  while (!main.do_sleep)
-      cond_wait(&sleepCond, &main.sleepLock);
+  wait_end_of_search();
+
+  lock_grab(&main.sleepLock);
 
   // Reset signals before to start the search
   memset((void*)&Search::Signals, 0, sizeof(Search::Signals));