X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fsearch.cpp;h=18c520f15fd71aebec2becbe72463612b5d84df0;hp=bc41978f2041cc1d4ac6f46aa40f6763eaea707c;hb=e74c2df907d5336d3d2b8ee7748b82270ebbf337;hpb=a6f873cd8d05dda3638a7ea624ccbac90ecb98af diff --git a/src/search.cpp b/src/search.cpp index bc41978f..18c520f1 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -1517,9 +1517,9 @@ void Thread::idle_loop() { // Pointer 'this_sp' is not null only if we are called from split(), and not // at the thread creation. This means we are the split point's master. - SplitPoint* this_sp = splitPointsSize ? activeSplitPoint : nullptr; + SplitPoint* this_sp = activeSplitPoint; - assert(!this_sp || (this_sp->masterThread == this && searching)); + assert(!this_sp || (this_sp->master == this && searching)); while (!exit) { @@ -1529,6 +1529,7 @@ void Thread::idle_loop() { Threads.mutex.lock(); assert(activeSplitPoint); + SplitPoint* sp = activeSplitPoint; Threads.mutex.unlock(); @@ -1567,11 +1568,11 @@ void Thread::idle_loop() { // Wake up the master thread so to allow it to return from the idle // loop in case we are the last slave of the split point. - if ( this != sp->masterThread - && sp->slavesMask.none()) + if (this != sp->master && sp->slavesMask.none()) { - assert(!sp->masterThread->searching); - sp->masterThread->notify_one(); + assert(!sp->master->searching); + + sp->master->notify_one(); } // After releasing the lock we can't access any SplitPoint related data @@ -1582,7 +1583,6 @@ void Thread::idle_loop() { // Try to late join to another split point if none of its slaves has // already finished. SplitPoint* bestSp = NULL; - Thread* bestThread = NULL; int bestScore = INT_MAX; for (Thread* th : Threads) @@ -1610,7 +1610,6 @@ void Thread::idle_loop() { if (score < bestScore) { bestSp = sp; - bestThread = th; bestScore = score; } } @@ -1626,7 +1625,7 @@ void Thread::idle_loop() { if ( sp->allSlavesSearching && sp->slavesMask.count() < MAX_SLAVES_PER_SPLITPOINT - && available_to(bestThread)) + && available_to(sp->master)) { sp->slavesMask.set(idx); activeSplitPoint = sp; @@ -1638,7 +1637,7 @@ void Thread::idle_loop() { } } - // Grab the lock to avoid races with Thread::notify_one() + // Avoid races with notify_one() fired from last slave of the split point std::unique_lock lk(mutex); // If we are master and all slaves have finished then exit idle_loop