From 2e5ee3080b10ed34a5ec2c871b7c29280c984c1b Mon Sep 17 00:00:00 2001 From: Xinze Chi Date: Thu, 11 Dec 2014 04:33:34 +0000 Subject: [PATCH] Finisher: call signal if necessary in function queue Signed-off-by: Xinze Chi --- src/common/Finisher.h | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/common/Finisher.h b/src/common/Finisher.h index 76a3944ac9e3..3a5b4e393efb 100644 --- a/src/common/Finisher.h +++ b/src/common/Finisher.h @@ -49,20 +49,24 @@ class Finisher { public: void queue(Context *c, int r = 0) { finisher_lock.Lock(); + if (finisher_queue.empty()) { + finisher_cond.Signal(); + } if (r) { finisher_queue_rval.push_back(pair(c, r)); finisher_queue.push_back(NULL); } else finisher_queue.push_back(c); - finisher_cond.Signal(); if (logger) logger->inc(l_finisher_queue_len); finisher_lock.Unlock(); } void queue(vector& ls) { finisher_lock.Lock(); + if (finisher_queue.empty()) { + finisher_cond.Signal(); + } finisher_queue.insert(finisher_queue.end(), ls.begin(), ls.end()); - finisher_cond.Signal(); if (logger) logger->inc(l_finisher_queue_len, ls.size()); finisher_lock.Unlock(); @@ -70,8 +74,10 @@ class Finisher { } void queue(deque& ls) { finisher_lock.Lock(); + if (finisher_queue.empty()) { + finisher_cond.Signal(); + } finisher_queue.insert(finisher_queue.end(), ls.begin(), ls.end()); - finisher_cond.Signal(); if (logger) logger->inc(l_finisher_queue_len, ls.size()); finisher_lock.Unlock(); @@ -79,8 +85,10 @@ class Finisher { } void queue(list& ls) { finisher_lock.Lock(); + if (finisher_queue.empty()) { + finisher_cond.Signal(); + } finisher_queue.insert(finisher_queue.end(), ls.begin(), ls.end()); - finisher_cond.Signal(); if (logger) logger->inc(l_finisher_queue_len, ls.size()); finisher_lock.Unlock(); -- 2.47.3