X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fsearch.cpp;h=0f2373cd28fd28838c1e79990c5d26349ae554a2;hp=8088ff76c94ce36418d7307347ab16d211ae350e;hb=500c7f44ab46ca6303c465586a17fa63b8488cb4;hpb=bc6a6e04a07423433342085397a03af881ebe080 diff --git a/src/search.cpp b/src/search.cpp index 8088ff76..0f2373cd 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -2129,13 +2129,11 @@ split_point_start: // At split points actual search starts from here } // namespace -// Little helper used by idle_loop() to check that all the slaves of a -// master thread have finished searching. +// Little helper used by idle_loop() to check that all the slave threads of a +// split point have finished searching. static bool all_slaves_finished(SplitPoint* sp) { - assert(sp); - for (int i = 0; i < Threads.size(); i++) if (sp->is_slave[i]) return false; @@ -2156,7 +2154,7 @@ void Thread::idle_loop(SplitPoint* sp) { // instead of wasting CPU time polling for work. while ( do_sleep || do_terminate - || (Threads.use_sleeping_threads() && state == Thread::AVAILABLE)) + || (Threads.use_sleeping_threads() && !is_searching)) { assert((!sp && threadID) || Threads.use_sleeping_threads()); @@ -2182,19 +2180,17 @@ void Thread::idle_loop(SplitPoint* sp) { // particular we need to avoid a deadlock in case a master thread has, // in the meanwhile, allocated us and sent the wake_up() call before we // had the chance to grab the lock. - if (do_sleep || state == Thread::AVAILABLE) + if (do_sleep || !is_searching) cond_wait(&sleepCond, &sleepLock); lock_release(&sleepLock); } // If this thread has been assigned work, launch a search - if (state == Thread::WORKISWAITING) + if (is_searching) { assert(!do_terminate); - state = Thread::SEARCHING; - // Copy split point position and search stack and call search() SearchStack ss[PLY_MAX_PLUS_2]; SplitPoint* tsp = splitPoint; @@ -2212,15 +2208,15 @@ void Thread::idle_loop(SplitPoint* sp) { else assert(false); - assert(state == Thread::SEARCHING); + assert(is_searching); - state = Thread::AVAILABLE; + is_searching = false; // Wake up master thread so to allow it to return from the idle loop in // case we are the last slave of the split point. if ( Threads.use_sleeping_threads() && threadID != tsp->master - && Threads[tsp->master].state == Thread::AVAILABLE) + && !Threads[tsp->master].is_searching) Threads[tsp->master].wake_up(); }