}
+// 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
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);