read_evaluation_uci_options(pos.side_to_move());
Threads.read_uci_options();
- // Allocate pawn and material hash tables if number of active threads
- // increased and set a new TT size if changed.
- Threads.init_hash_tables();
+ // Set a new TT size if changed
TT.set_size(Options["Hash"].value<int>());
if (Options["Clear Hash"].value<bool>())
|| do_terminate
|| (Threads.use_sleeping_threads() && state == Thread::AVAILABLE))
{
- assert(!sp || Threads.use_sleeping_threads());
- assert(threadID != 0 || Threads.use_sleeping_threads());
+ assert((!sp && threadID) || Threads.use_sleeping_threads());
+
+ // Grab the lock to avoid races with Thread::wake_up()
+ lock_grab(&sleepLock);
// Slave thread should exit as soon as do_terminate flag raises
if (do_terminate)
{
assert(!sp);
- state = Thread::TERMINATED;
+ lock_release(&sleepLock);
return;
}
- if (state == Thread::INITIALIZING)
- state = Thread::AVAILABLE;
-
- // Grab the lock to avoid races with Thread::wake_up()
- lock_grab(&sleepLock);
-
// If we are master and all slaves have finished don't go to sleep
if (sp && all_slaves_finished(sp))
{