// 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);
while (!main.do_sleep)
cond_wait(&sleepCond, &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));
+
main.do_sleep = false;
cond_signal(&main.sleepCond); // Wake up main thread