From: Xinze Chi Date: Thu, 11 Dec 2014 04:33:34 +0000 (+0000) Subject: Finisher: call signal if necessary in function queue X-Git-Tag: v0.91~52^2~15^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F3145%2Fhead;p=ceph.git Finisher: call signal if necessary in function queue Signed-off-by: Xinze Chi --- 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();