From: Marco Costalba Date: Mon, 9 Nov 2015 08:50:02 +0000 (+0100) Subject: Fix broken UCI 'wait for stop' X-Git-Url: https://git.sesse.net/?p=stockfish;a=commitdiff_plain;h=ce84ab6e9dc64e0c137c2785a36e4a345a8a5a95 Fix broken UCI 'wait for stop' When we reach the maximum depth, we can finish the search without a raise of Signals.stop. However, if we are pondering or in an infinite search, the UCI protocol states that we shouldn't print the best move before the GUI sends a "stop" or "ponderhit" command. It was broken by lazy smp. Fix it by moving the stopping of the threads after waiting for GUI. No functional change. --- diff --git a/src/search.cpp b/src/search.cpp index 58a52831..205e9927 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -300,14 +300,6 @@ void MainThread::think() { } search(true); // Let's start searching! - - // Stop the threads - Signals.stop = true; - - // Wait until all threads have finished - for (Thread* th : Threads) - if (th != this) - th->wait_while(th->searching); } // When playing in 'nodes as time' mode, subtract the searched nodes from @@ -326,6 +318,14 @@ void MainThread::think() { wait(Signals.stop); } + // Stop the threads if not already stopped + Signals.stop = true; + + // Wait until all threads have finished + for (Thread* th : Threads) + if (th != this) + th->wait_while(th->searching); + // Check if there are threads with a better score than main thread. Thread* bestThread = this; for (Thread* th : Threads)