X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fthread.cpp;h=4a37d393edff4ca6f83eaa9a7f86917ec8dcc6ef;hp=df76dcca7a2e1fe990c4859bd23219afcc8188f8;hb=4cc272cb94d0f226fc6af96076e104dfbdf3c4c4;hpb=d58176bfead421088bb3543b3cb6d1c359a3c91b diff --git a/src/thread.cpp b/src/thread.cpp index df76dcca..4a37d393 100644 --- a/src/thread.cpp +++ b/src/thread.cpp @@ -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);