X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;ds=sidebyside;f=src%2Fthread.cpp;h=cdb0d5412a501b781e4064815eacf255b358ef66;hb=8fd34d7763072fc3ec7216729c1f7b7354bfa470;hp=8eaee87500dbf3c2fa5e78950e2df5c989a077c2;hpb=fb03188fc7e96f8bd21177fa2a2990cf8dde7575;p=stockfish diff --git a/src/thread.cpp b/src/thread.cpp index 8eaee875..cdb0d541 100644 --- a/src/thread.cpp +++ b/src/thread.cpp @@ -200,21 +200,22 @@ void Thread::split(Position& pos, Stack* ss, Value alpha, Value beta, Value* bes assert(!searching); assert(!activePosition); - searching = true; - // We have returned from the idle loop, which means that all threads are // finished. Note that decreasing splitPointsSize must be done under lock // protection to avoid a race with Thread::can_join(). - sp.spinlock.acquire(); + spinlock.acquire(); + searching = true; --splitPointsSize; activeSplitPoint = sp.parentSplitPoint; activePosition = &pos; + + spinlock.release(); + + // Split point data cannot be changed now, so no need to lock protect pos.set_nodes_searched(pos.nodes_searched() + sp.nodes); *bestMove = sp.bestMove; *bestValue = sp.bestValue; - - sp.spinlock.release(); }