Skip to content

Commit

Permalink
Remove uithread
Browse files Browse the repository at this point in the history
With the current questions and issues around threading, I had a look at
#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 #2310

No functional change.
  • Loading branch information
xoto10 authored and snicolet committed Oct 19, 2019
1 parent 472de89 commit 12d58ad
Showing 1 changed file with 3 additions and 3 deletions.
6 changes: 3 additions & 3 deletions src/uci.cpp
Expand Up @@ -191,9 +191,8 @@ void UCI::loop(int argc, char* argv[]) {
Position pos;
string token, cmd;
StateListPtr states(new std::deque<StateInfo>(1));
auto uiThread = std::make_shared<Thread>(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]) + " ";
Expand Down Expand Up @@ -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;
Expand Down

0 comments on commit 12d58ad

Please sign in to comment.