common/Finisher: only queue empty only wake up waiter.

Signed-off-by: Jianpeng Ma <jianpeng.ma@intel.com>
This commit is contained in:
Jianpeng Ma 2018-09-20 21:28:40 +08:00
parent d7ca34e12f
commit 754f3aa445

View File

@ -193,18 +193,22 @@ public:
ContextQueue(Mutex& mut, Cond& con) : mutex(mut), cond(con) {}
void queue(list<Context *>& ls) {
bool empty = false;
{
std::scoped_lock l(q_mutex);
if (q.empty()) {
q.swap(ls);
empty = true;
} else {
q.insert(q.end(), ls.begin(), ls.end());
}
}
mutex.Lock();
cond.SignalOne();
mutex.Unlock();
if (empty) {
mutex.Lock();
cond.SignalOne();
mutex.Unlock();
}
ls.clear();
}