]> git.sesse.net Git - stockfish/blobdiff - src/thread.cpp
Detach search arguments from UI thread
[stockfish] / src / thread.cpp
index 536f22c1194cf6912eb578f550cf1d298d21d959..06646a7b99b131d9751ccdc7b951dd9f6a631bb5 100644 (file)
@@ -423,36 +423,25 @@ void Thread::main_loop() {
 }
 
 
-// ThreadsManager::wait_end_of_search() blocks UI thread until main thread has
-// returned to sleep in main_loop(). It is needed becuase xboard sends immediately
-// new position to search after a "stop" due to ponder miss.
-
-void ThreadsManager::wait_end_of_search() {
-
-  Thread& main = threads[0];
-
-  lock_grab(&main.sleepLock);
-
-  while (!main.do_sleep)
-      cond_wait(&sleepCond, &main.sleepLock);
-
-  lock_release(&main.sleepLock);
-}
-
-
 // ThreadsManager::start_thinking() is used by UI thread to wake up the main
 // thread parked in main_loop() and starting a new search. If asyncMode is true
 // then function returns immediately, otherwise caller is blocked waiting for
 // the search to finish.
 
-void ThreadsManager::start_thinking(bool asyncMode) {
-
+void ThreadsManager::start_thinking(const Position& pos, const Search::LimitsType& limits,
+                                    const std::vector<Move>& searchMoves, bool asyncMode) {
   Thread& main = threads[0];
 
+  lock_grab(&main.sleepLock);
+
   // Wait main thread has finished before to launch a new search
-  wait_end_of_search();
+  while (!main.do_sleep)
+      cond_wait(&sleepCond, &main.sleepLock);
 
-  lock_grab(&main.sleepLock);
+  // Copy input arguments to Search global variables
+  Search::RootPosition.copy(pos, 0);
+  Search::Limits = limits;
+  Search::RootMoves = searchMoves;
 
   // Reset signals before to start the search
   memset((void*)&Search::Signals, 0, sizeof(Search::Signals));