]> git.sesse.net Git - stockfish/blobdiff - src/thread.cpp
Re-add the hack
[stockfish] / src / thread.cpp
index fe19331440c5de057b71e9f8ba88b1c49845481e..1f5dc82350e50bdfbcbf0bc578a239d3314b7ea4 100644 (file)
@@ -49,7 +49,8 @@ Thread::Thread(Fn fn) : splitPoints() {
   curSplitPoint = NULL;
   start_fn = fn;
   idx = Threads.size();
-  do_sleep = true;
+
+  do_sleep = (fn != &Thread::main_loop); // Avoid a race with start_searching()
 
   if (!thread_create(handle, start_routine, this))
   {
@@ -80,7 +81,8 @@ void Thread::timer_loop() {
   while (!do_exit)
   {
       mutex.lock();
-      sleepCondition.wait_for(mutex, maxPly ? maxPly : INT_MAX);
+      while (!maxPly && !do_exit)
+          sleepCondition.wait_for(mutex, maxPly ? maxPly : INT_MAX);
       mutex.unlock();
       check_time();
   }
@@ -237,16 +239,6 @@ bool ThreadPool::available_slave_exists(Thread* master) const {
 }
 
 
-// set_timer() is used to set the timer to trigger after msec milliseconds.
-// If msec is 0 then timer is stopped.
-
-void ThreadPool::set_timer(int msec) {
-
-  timer->maxPly = msec;
-  timer->notify_one(); // Wake up and restart the timer
-}
-
-
 // split() does the actual work of distributing the work at a node between
 // several available threads. If it does not succeed in splitting the node
 // (because no idle threads are available, or because we have no unused split