From ce84ab6e9dc64e0c137c2785a36e4a345a8a5a95 Mon Sep 17 00:00:00 2001 From: Marco Costalba Date: Mon, 9 Nov 2015 09:50:02 +0100 Subject: [PATCH 1/1] 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. --- src/search.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) 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) -- 2.39.2