Correctly exit work queue on done, race condition fix.

done_ might've been set to true while processing the item, making the wait wait forever.
This commit is contained in:
Unknown W. Brackets
2013-10-13 11:59:43 -07:00
parent b469bc8aff
commit 1b5c59db75
+2 -2
View File
@@ -12,8 +12,8 @@ PrioritizedWorkQueue::~PrioritizedWorkQueue() {
void PrioritizedWorkQueue::Add(PrioritizedWorkQueueItem *item) {
mutex_.lock();
queue_.push_back(item);
mutex_.unlock();
notEmpty_.notify_one();
mutex_.unlock();
}
void PrioritizedWorkQueue::Stop() {
@@ -38,7 +38,7 @@ void PrioritizedWorkQueue::Flush() {
// The worker should simply call this in a loop. Will block when appropriate.
PrioritizedWorkQueueItem *PrioritizedWorkQueue::Pop() {
mutex_.lock();
while (queue_.empty()) {
while (queue_.empty() && !done_) {
notEmpty_.wait(mutex_);
if (done_) {
mutex_.unlock();