]> git.sesse.net Git - stockfish/blobdiff - src/thread.cpp
Fix regression: engine hangs while pondering
[stockfish] / src / thread.cpp
index df76dcca7a2e1fe990c4859bd23219afcc8188f8..4a37d393edff4ca6f83eaa9a7f86917ec8dcc6ef 100644 (file)
@@ -239,6 +239,19 @@ bool ThreadsManager::available_slave_exists(int master) const {
 }
 
 
+// split_point_finished() checks if all the slave threads of a given split
+// point have finished searching.
+
+bool ThreadsManager::split_point_finished(SplitPoint* sp) const {
+
+  for (int i = 0; i < activeThreads; i++)
+      if (sp->is_slave[i])
+          return false;
+
+  return true;
+}
+
+
 // split() does the actual work of distributing the work at a node between
 // several available threads. If it does not succeed in splitting the
 // node (because no idle threads are available, or because we have no unused
@@ -420,8 +433,10 @@ void Thread::listener_loop() {
       if (is_searching)
       {
           // Command "quit" is the last one received by the GUI, so park the
-          // thread waiting for exiting.
-          if (cmd == "quit")
+          // thread waiting for exiting. Also, after a "stop", for instance on a
+          // ponder miss, GUI can immediately send the new position to search,
+          // so return to in-sync mode to avoid discarding good data.
+          if (cmd == "quit" || cmd == "stop")
               is_searching = false;
 
           do_uci_async_cmd(cmd);