fix locking in GenericQueueThread::process

This commit is contained in:
Seth Alves 2016-03-25 11:37:04 -07:00
parent 7064b29a2d
commit 13eddef312

View file

@ -45,18 +45,23 @@ protected:
} }
virtual bool process() { virtual bool process() {
lock();
if (!_items.size()) { if (!_items.size()) {
unlock();
_hasItemsMutex.lock(); _hasItemsMutex.lock();
_hasItems.wait(&_hasItemsMutex, getMaxWait()); _hasItems.wait(&_hasItemsMutex, getMaxWait());
_hasItemsMutex.unlock(); _hasItemsMutex.unlock();
} else {
unlock();
} }
lock();
if (!_items.size()) { if (!_items.size()) {
unlock();
return isStillRunning(); return isStillRunning();
} }
Queue processItems; Queue processItems;
lock();
processItems.swap(_items); processItems.swap(_items);
unlock(); unlock();
return processQueueItems(processItems); return processQueueItems(processItems);