X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fsearch.cpp;h=dd3030a0dd4f1390b0ef8b1043ff70bfa73afb19;hp=ad3898c14af9cbe3faf7727ddb4146661691e0b8;hb=c645aca199ac7db2ffcfc229b3cda8dafa6fb835;hpb=44432f67d724573d0f6e3cfea6165c9b1d125d72 diff --git a/src/search.cpp b/src/search.cpp index ad3898c1..dd3030a0 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -1862,32 +1862,29 @@ void Thread::idle_loop(SplitPoint* sp_master) { // Try to reparent to another split point. Only for slave threads // that are not master of any active split point. - if ( !sp_master - && !is_searching - && !do_sleep - && !do_exit - && !splitPointsCnt - && Threads.size() > 2) - { + if (!splitPointsCnt) for (int i = 0; i < Threads.size(); i++) { - SplitPoint* oldest = &Threads[i].splitPoints[0]; - - // Find the first oldest split point with still all slaves running - if ( Threads[i].splitPointsCnt - && oldest->slavesMask == oldest->allSlavesMask + Thread* th = &Threads[i]; + SplitPoint* oldest = &th->splitPoints[0]; + + // Find the first split point with still all slaves running + // where we are available as a possible slave. + if ( !is_searching + && th->splitPointsCnt + && !oldest->cutoff + && oldest->slavesMask == oldest->allSlavesMask && !single_bit(oldest->allSlavesMask)) { lock_grab(oldest->lock); - lock_grab(Threads.splitLock); // Needed by is_searching + lock_grab(Threads.splitLock); // Retest all under lock protection, we are in the middle - // of a race storm ! + // of a race storm here ! if ( !is_searching - && !do_sleep - && !do_exit - && Threads[i].splitPointsCnt - && oldest->slavesMask == oldest->allSlavesMask + && th->splitPointsCnt + && !oldest->cutoff + && oldest->slavesMask == oldest->allSlavesMask && !single_bit(oldest->allSlavesMask)) { oldest->slavesMask |= 1ULL << idx; // allSlavesMask is not updated @@ -1901,7 +1898,6 @@ void Thread::idle_loop(SplitPoint* sp_master) { break; // Exit anyhow, only one try (enough in 99% of cases) } } - } } } }