Set do_sleep out of lock protection
authorMarco Costalba <mcostalba@gmail.com>
Tue, 27 Mar 2012 17:47:41 +0000 (18:47 +0100)
committerMarco Costalba <mcostalba@gmail.com>
Tue, 27 Mar 2012 18:27:20 +0000 (19:27 +0100)
Fixes a not so rare crash (once every 100 games)
newly introduced. Unfortunatly I am still not
able to figure out why :-(

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
src/thread.cpp

index 10f432bd71bdf81b30af7eafdf7ff2606d046cc9..6a5454faa9ed5abc0dc07a06ab585cb7b5f0bea8 100644 (file)
@@ -137,7 +137,6 @@ void Thread::main_loop() {
 void Thread::wake_up() {
 
   lock_grab(sleepLock);
-  do_sleep = false;
   cond_signal(sleepCond);
   lock_release(sleepLock);
 }
@@ -257,6 +256,7 @@ void ThreadsManager::wake_up() const {
   for (int i = 0; i < size(); i++)
   {
       threads[i]->maxPly = 0;
+      threads[i]->do_sleep = false;
 
       if (!useSleepingThreads)
           threads[i]->wake_up();
@@ -442,5 +442,6 @@ void ThreadsManager::start_searching(const Position& pos, const LimitsType& limi
       if (searchMoves.empty() || searchMoves.count(ml.move()))
           RootMoves.push_back(RootMove(ml.move()));
 
+  threads[0]->do_sleep = false;
   threads[0]->wake_up();
 }