mirror of
https://github.com/sockspls/badfish
synced 2025-04-30 16:53:09 +00:00
Avoid a race at thread creation
Before creating main thread we set its do_sleep flag to true, then thread is created and it will go to sleep in main_loop() after resetting do_sleep. But if after the setting of do_sleep and before its resetting the UI thread calls start_thinking() it will not wait on: if (!asyncMode) while (!main.do_sleep) cond_wait(&sleepCond, &main.sleepLock); as it should but will immediately return before the main thread has started the search. This very rare race show itself during bench, when the first position is erroneusly skipped so that bench node count results of 5309038 instead of the correct 5457475. The patch is somewhat tricky, but is simple and it works! No functional change. Signed-off-by: Marco Costalba <mcostalba@gmail.com>
This commit is contained in:
parent
b1fcfe4c5d
commit
d282cf6964
1 changed files with 1 additions and 1 deletions
|
@ -172,7 +172,7 @@ void ThreadsManager::init() {
|
|||
for (int i = 0; i <= MAX_THREADS; i++)
|
||||
{
|
||||
threads[i].is_searching = false;
|
||||
threads[i].do_sleep = true;
|
||||
threads[i].do_sleep = (i != 0); // Avoid a race with start_thinking()
|
||||
threads[i].threadID = i;
|
||||
|
||||
#if defined(_MSC_VER)
|
||||
|
|
Loading…
Add table
Reference in a new issue