CondVar::SignalAll was broken, leading to deadlocks on Windows builds.

http://code.google.com/p/leveldb/issues/detail?id=149
This commit is contained in:
JoelKatz
2013-05-16 23:01:24 -07:00
parent 7f25ccec49
commit 4d0f02a46a

View File

@@ -109,12 +109,10 @@ void CondVar::Signal() {
void CondVar::SignalAll() { void CondVar::SignalAll() {
wait_mtx_.Lock(); wait_mtx_.Lock();
for(long i = 0; i < waiting_; ++i) { ::ReleaseSemaphore(sem1_, waiting_, NULL);
::ReleaseSemaphore(sem1_, 1, NULL); while(waiting_ > 0) {
while(waiting_ > 0) { --waiting_;
--waiting_; ::WaitForSingleObject(sem2_, INFINITE);
::WaitForSingleObject(sem2_, INFINITE);
}
} }
wait_mtx_.Unlock(); wait_mtx_.Unlock();
} }