// but if we are pondering or in infinite search, we shouldn't print the best
// move before we are told to do so.
if (!Signals.stop && (Limits.ponder || Limits.infinite))
- RootPos.this_thread()->wait_for_stop_or_ponderhit();
+ {
+ Signals.stopOnPonderhit = true;
+ RootPos.this_thread()->wait_for_stop();
+ }
// Best move could be MOVE_NONE when searching on a stalemate position
sync_cout << "bestmove " << move_to_uci(RootMoves[0].pv[0], RootPos.is_chess960())
}
-// Thread::wait_for_stop_or_ponderhit() is called when the maximum depth is
-// reached while the program is pondering. The point is to work around a wrinkle
-// in the UCI protocol: When pondering, the engine is not allowed to give a
-// "bestmove" before the GUI sends it a "stop" or "ponderhit" command. We simply
-// wait here until one of these commands (that raise StopRequest) is sent and
+// Thread::wait_for_stop() is called when the maximum depth is reached while
+// the program is pondering. The point is to work around a wrinkle in the UCI
+// protocol: When pondering, the engine is not allowed to give a "bestmove"
+// before the GUI sends it a "stop" or "ponderhit" command. We simply wait here
+// until one of these commands (that raise Signals.stop) is sent and
// then return, after which the bestmove and pondermove will be printed.
-void Thread::wait_for_stop_or_ponderhit() {
-
- Signals.stopOnPonderhit = true;
+void Thread::wait_for_stop() {
mutex.lock();
while (!Signals.stop) sleepCondition.wait(mutex);
void idle_loop();
void main_loop();
void timer_loop();
- void wait_for_stop_or_ponderhit();
+ void wait_for_stop();
SplitPoint splitPoints[MAX_SPLITPOINTS_PER_THREAD];
Material::Table materialTable;