From: xoto10 Date: Thu, 19 Sep 2019 16:10:46 +0000 (+0100) Subject: Remove uithread X-Git-Url: https://git.sesse.net/?p=stockfish;a=commitdiff_plain;h=12d58adc68b1aa084d383d06bc47abbb3495ce3e;hp=472de897cb7efb66cb3518f3f4924716bd8abaee Remove uithread With the current questions and issues around threading, I had a look at https://github.com/official-stockfish/Stockfish/issues/2299. It seems there was a problem with data races when requesting eval via UCI while a search was already running. To fix this an extra thread uithread was created, presumably to avoid an overlap with Threads.main() that was causing problems. Making this eval request seems to be outside the scope of UCI, and @vondele also reports that the data race is not even fixed reliably by this change. I suggest we simplify the threading here by removing this uithread and adding a comment signaling that user should not request eval when a search is already running. Closes https://github.com/official-stockfish/Stockfish/pull/2310 No functional change. --- diff --git a/src/uci.cpp b/src/uci.cpp index a4235f2b..99bf1a13 100644 --- a/src/uci.cpp +++ b/src/uci.cpp @@ -191,9 +191,8 @@ void UCI::loop(int argc, char* argv[]) { Position pos; string token, cmd; StateListPtr states(new std::deque(1)); - auto uiThread = std::make_shared(0); - pos.set(StartFEN, false, &states->back(), uiThread.get()); + pos.set(StartFEN, false, &states->back(), Threads.main()); for (int i = 1; i < argc; ++i) cmd += std::string(argv[i]) + " "; @@ -229,7 +228,8 @@ void UCI::loop(int argc, char* argv[]) { else if (token == "ucinewgame") Search::clear(); else if (token == "isready") sync_cout << "readyok" << sync_endl; - // Additional custom non-UCI commands, mainly for debugging + // Additional custom non-UCI commands, mainly for debugging. + // Do not use these commands during a search! else if (token == "flip") pos.flip(); else if (token == "bench") bench(pos, is, states); else if (token == "d") sync_cout << pos << sync_endl;