]> git.sesse.net Git - stockfish/blobdiff - src/search.cpp
Don't check for early stop when StopOnPonderhit is set
[stockfish] / src / search.cpp
index 4304298c73eb4783a7f45e4c20b488f3aa8f567e..061ba5eea95eaaa5607f33f3f6e4c0ac42715bf5 100644 (file)
@@ -162,7 +162,7 @@ namespace {
   int MultiPV, UCIMultiPV, MultiPVIdx;
 
   // Time management variables
-  bool StopOnPonderhit, FirstRootMove, StopRequest, QuitRequest, AspirationFailLow;
+  volatile bool StopOnPonderhit, FirstRootMove, StopRequest, QuitRequest, AspirationFailLow;
   TimeManager TimeMgr;
   SearchLimits Limits;
 
@@ -465,9 +465,10 @@ bool think(Position& pos, const SearchLimits& limits, Move searchMoves[]) {
       pos.undo_move(bestMove); // Return from think() with unchanged position
   }
 
-  // If we are pondering or in infinite search, we shouldn't print the best move
+  // When we reach max depth we arrive here even without a StopRequest, but if
+  // we are pondering or in infinite search, we shouldn't print the best move
   // before we are told to do so.
-  if (Limits.ponder || Limits.infinite)
+  if (!StopRequest && (Limits.ponder || Limits.infinite))
       wait_for_stop_or_ponderhit();
 
   // Could be MOVE_NONE when searching on a stalemate position
@@ -648,14 +649,9 @@ namespace {
         if (depth > 2 && bestMoveChanges[depth])
             bestMoveNeverChanged = false;
 
-        // Check for some early stop condition
-        if (!StopRequest && Limits.useTimeManagement())
+        // Do we have time for the next iteration? Can we stop searching now?
+        if (!StopRequest && !StopOnPonderhit && Limits.useTimeManagement())
         {
-            // Stop search early if there is only a single legal move. Search to
-            // some depth anyway to get a proper score.
-            if (Rml.size() == 1 && depth >= 7)
-                StopRequest = true;
-
             // Take in account some extra time if the best move has changed
             if (depth > 4 && depth < 50)
                 TimeMgr.pv_instability(bestMoveChanges[depth], bestMoveChanges[depth - 1]);
@@ -683,7 +679,7 @@ namespace {
             }
 
             // If we are allowed to ponder do not stop the search now but keep pondering
-            if (StopRequest && Limits.ponder)
+            if (StopRequest && Limits.ponder) // FIXME Limits.ponder is racy
             {
                 StopRequest = false;
                 StopOnPonderhit = true;