]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
common/Finisher: only queue empty only wake up waiter.
authorJianpeng Ma <jianpeng.ma@intel.com>
Thu, 20 Sep 2018 13:28:40 +0000 (21:28 +0800)
committerJianpeng Ma <jianpeng.ma@intel.com>
Thu, 20 Sep 2018 13:53:47 +0000 (21:53 +0800)
Signed-off-by: Jianpeng Ma <jianpeng.ma@intel.com>
src/common/Finisher.h

index 4b6d2d3c8a136da2896df3e5264b0ee10ca8b366..94607ea21a679aece473fa1a77c83956e251b661 100644 (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();
   }