diff --git a/src/lock.h b/src/lock.h index 0af1443d..3b3de1ac 100644 --- a/src/lock.h +++ b/src/lock.h @@ -75,8 +75,8 @@ typedef HANDLE WaitCondition; # define cond_init(x) { *x = CreateEvent(0, FALSE, FALSE, 0); } # define cond_destroy(x) CloseHandle(*x) # define cond_signal(x) SetEvent(*x) -# define cond_wait(x,y) { ResetEvent(*x); lock_release(y); WaitForSingleObject(*x, INFINITE); lock_grab(y); } -# define cond_timedwait(x,y,z) { ResetEvent(*x); lock_release(y); WaitForSingleObject(*x,z); lock_grab(y); } +# define cond_wait(x,y) { lock_release(y); WaitForSingleObject(*x, INFINITE); lock_grab(y); } +# define cond_timedwait(x,y,z) { lock_release(y); WaitForSingleObject(*x,z); lock_grab(y); } #endif diff --git a/src/thread.cpp b/src/thread.cpp index bc26d4df..394e0698 100644 --- a/src/thread.cpp +++ b/src/thread.cpp @@ -202,7 +202,7 @@ void ThreadsManager::exit() { // Wait for thread termination #if defined(_MSC_VER) - WaitForSingleObject(threads[i].handle, 0); + WaitForSingleObject(threads[i].handle, INFINITE); CloseHandle(threads[i].handle); #else pthread_join(threads[i].handle, NULL); @@ -452,7 +452,8 @@ void ThreadsManager::start_thinking(const Position& pos, const LimitsType& limit cond_signal(&main.sleepCond); // Wake up main thread and start searching if (!asyncMode) - cond_wait(&sleepCond, &main.sleepLock); + while (!main.do_sleep) + cond_wait(&sleepCond, &main.sleepLock); lock_release(&main.sleepLock); }