X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fthread.cpp;h=d845fdf2e4183f2fdaa10bb656b66d1ab6439749;hp=8269dcf3d50029d2e4e355a8da8c345b48ddee80;hb=83d8fe2d59bad718de70b00ac2c8fddfadda76b5;hpb=63a04134d0841bb362f42d600faf614038fff494;ds=sidebyside diff --git a/src/thread.cpp b/src/thread.cpp index 8269dcf3..d845fdf2 100644 --- a/src/thread.cpp +++ b/src/thread.cpp @@ -192,14 +192,19 @@ void ThreadsManager::init() { void ThreadsManager::exit() { + // Wake up all the slave threads at once. This is faster than "wake and wait" + // for each thread and avoids a rare crash once every 10K games under Linux. + for (int i = 1; i < MAX_THREADS; i++) + { + threads[i].do_terminate = true; + threads[i].wake_up(); + } + for (int i = 0; i < MAX_THREADS; i++) { - // Wake up all the slave threads and wait for termination if (i != 0) { - threads[i].do_terminate = true; - threads[i].wake_up(); - + // Wait for slave termination #if defined(_MSC_VER) WaitForSingleObject(threads[i].handle, 0); CloseHandle(threads[i].handle);