X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fthread.cpp;h=a6886b1ce8c9508025aa4becf4bba159ee390bda;hp=80765cdeba0a981e2bbe21120e1694f355c5040c;hb=e5bc79fb9cf0f47c850ad0cc0b057d9f86e788cd;hpb=880726c13a393e70ddc358741e68cc28a546ae8c diff --git a/src/thread.cpp b/src/thread.cpp index 80765cde..a6886b1c 100644 --- a/src/thread.cpp +++ b/src/thread.cpp @@ -19,7 +19,6 @@ #include // For std::count #include -#include // For memset #include #include "movegen.h" @@ -49,6 +48,7 @@ Thread::Thread() /* : splitPoints() */ { // Value-initialization bug in MSVC searching = exit = false; maxPly = splitPointsSize = 0; activeSplitPoint = NULL; + activePosition = NULL; idx = Threads.size(); if (!thread_create(handle, start_routine, this)) @@ -281,8 +281,6 @@ void Thread::split(Position& pos, Stack* ss, Value alpha, Value beta, Value* bes sp.cutoff = false; sp.ss = ss; - memset(sp.slavesPositions, 0, sizeof(sp.slavesPositions)); - // Try to allocate available threads and ask them to start searching setting // 'searching' flag. This must be done under lock protection to avoid concurrent // allocation of the same slave by another master. @@ -291,6 +289,7 @@ void Thread::split(Position& pos, Stack* ss, Value alpha, Value beta, Value* bes splitPointsSize++; activeSplitPoint = &sp; + activePosition = NULL; size_t slavesCnt = 1; // This thread is always included Thread* slave; @@ -318,6 +317,7 @@ void Thread::split(Position& pos, Stack* ss, Value alpha, Value beta, Value* bes // In helpful master concept a master can help only a sub-tree of its split // point, and because here is all finished is not possible master is booked. assert(!searching); + assert(!activePosition); } // We have returned from the idle loop, which means that all threads are @@ -329,6 +329,7 @@ void Thread::split(Position& pos, Stack* ss, Value alpha, Value beta, Value* bes searching = true; splitPointsSize--; activeSplitPoint = sp.parentSplitPoint; + activePosition = &pos; pos.set_nodes_searched(pos.nodes_searched() + sp.nodes); *bestMove = sp.bestMove; *bestValue = sp.bestValue;