Fix regression: engine hangs while pondering
authorMarco Costalba <mcostalba@gmail.com>
Thu, 10 Nov 2011 08:20:41 +0000 (09:20 +0100)
committerMarco Costalba <mcostalba@gmail.com>
Thu, 10 Nov 2011 14:08:53 +0000 (15:08 +0100)
After a "stop" due to a ponder miss Xboard sends
immediately the new position to search, without
waiting for engine to effectively stop the search.

It is not clear if this is a GUI bug (as I suspect)
or allowed behaviour, but because it won't be fixed
anyway workaround this issue making listener thread
to switch to in-sync mode as soon as a "stop" command
is received.

Thanks to Mike Whiteley for reporting this.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
src/thread.cpp

index ca9fe14d8fa48dfee160df9e454fbfadb2013f53..4a37d393edff4ca6f83eaa9a7f86917ec8dcc6ef 100644 (file)
@@ -433,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);