]> git.sesse.net Git - stockfish/blobdiff - src/thread.cpp
Fix endless reaparenting loop
[stockfish] / src / thread.cpp
index 6d07ec35f3e29d1e83295c7417481dac7c9ffead..631834da4b9f60c159facb502b5f7e2c0ac3fe04 100644 (file)
@@ -313,13 +313,13 @@ Value ThreadsManager::split(Position& pos, Stack* ss, Value alpha, Value beta,
       return bestValue;
 
   // Pick the next available split point from the split point stack
-  SplitPoint* sp = &master->splitPoints[master->splitPointsCnt++];
+  SplitPoint* sp = &master->splitPoints[master->splitPointsCnt];
 
   sp->parent = master->curSplitPoint;
   sp->master = master;
   sp->cutoff = false;
   sp->slavesMask = 1ULL << master->idx;
-  sp->allSlavesMask = 1ULL << master->idx;
+  sp->allSlavesRunning = true;
   sp->depth = depth;
   sp->bestMove = *bestMove;
   sp->threatMove = threatMove;
@@ -348,7 +348,6 @@ Value ThreadsManager::split(Position& pos, Stack* ss, Value alpha, Value beta,
       if (threads[i]->is_available_to(master))
       {
           sp->slavesMask |= 1ULL << i;
-          sp->allSlavesMask |= 1ULL << i;
           threads[i]->curSplitPoint = sp;
           threads[i]->is_searching = true; // Slave leaves idle_loop()
 
@@ -356,12 +355,11 @@ Value ThreadsManager::split(Position& pos, Stack* ss, Value alpha, Value beta,
               threads[i]->wake_up();
 
           if (++slavesCnt + 1 >= maxThreadsPerSplitPoint) // Master is always included
-          {
-              sp->allSlavesMask = 0; // Disable reparenting to this split point
               break;
-          }
       }
 
+  master->splitPointsCnt++;
+
   lock_release(splitLock);
   lock_release(sp->lock);