X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fthread.cpp;h=3eb393bc4ec7226ee131dd48d1773763fe591cde;hp=8a8e7199d43e00c42b3c5405ea95ace53af93d40;hb=c94cfebb7e6d787b9bdf2670cc1436eb0dfbea57;hpb=57e942145c113e9d1bed7eeef5089dd22eedaad6 diff --git a/src/thread.cpp b/src/thread.cpp index 8a8e7199..3eb393bc 100644 --- a/src/thread.cpp +++ b/src/thread.cpp @@ -274,8 +274,8 @@ Value ThreadsManager::split(Position& pos, Stack* ss, Value alpha, Value beta, // Try to allocate available threads and ask them to start searching setting // is_searching flag. This must be done under lock protection to avoid concurrent // allocation of the same slave by another master. + lock_grab(sp->lock); lock_grab(splitLock); - lock_grab(sp->lock); // To protect sp->slaves_mask for (int i = 0; i < activeThreads && !Fake; i++) if (threads[i].is_available_to(master)) @@ -294,8 +294,8 @@ Value ThreadsManager::split(Position& pos, Stack* ss, Value alpha, Value beta, masterThread.splitPoint = sp; masterThread.activeSplitPoints++; - lock_release(sp->lock); lock_release(splitLock); + lock_release(sp->lock); // Everything is set up. The master thread enters the idle loop, from which // it will instantly launch a search, because its is_searching flag is set. @@ -308,16 +308,16 @@ Value ThreadsManager::split(Position& pos, Stack* ss, Value alpha, Value beta, // We have returned from the idle loop, which means that all threads are // finished. Note that setting is_searching and decreasing activeSplitPoints is // done under lock protection to avoid a race with Thread::is_available_to(). - lock_grab(splitLock); lock_grab(sp->lock); // To protect sp->nodes + lock_grab(splitLock); masterThread.is_searching = true; masterThread.activeSplitPoints--; masterThread.splitPoint = sp->parent; pos.set_nodes_searched(pos.nodes_searched() + sp->nodes); - lock_release(sp->lock); lock_release(splitLock); + lock_release(sp->lock); return sp->bestValue; }