]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
msg/async: avoid atomic variable overhead 12809/head
authorWei Jin <wjin.cn@gmail.com>
Fri, 6 Jan 2017 09:35:08 +0000 (17:35 +0800)
committerWei Jin <wjin.cn@gmail.com>
Fri, 6 Jan 2017 09:47:18 +0000 (17:47 +0800)
1) there is already a lock to protect the count
2) no need to send signal during each callback

Signed-off-by: Wei Jin <wjin.cn@gmail.com>
src/msg/async/Stack.cc

index d81241eb8aaf4bd1c3321f04c5fe842a0932627c..26d119b999cdc68cd8d102647936578e8d3a5ea7 100644 (file)
@@ -174,7 +174,7 @@ void NetworkStack::stop()
 class C_drain : public EventCallback {
   Mutex drain_lock;
   Cond drain_cond;
-  std::atomic<unsigned> drain_count;
+  unsigned drain_count;
 
  public:
   explicit C_drain(size_t c)
@@ -183,11 +183,11 @@ class C_drain : public EventCallback {
   void do_request(int id) {
     Mutex::Locker l(drain_lock);
     drain_count--;
-    drain_cond.Signal();
+    if (drain_count == 0) drain_cond.Signal();
   }
   void wait() {
     Mutex::Locker l(drain_lock);
-    while (drain_count.load())
+    while (drain_count)
       drain_cond.Wait(drain_lock);
   }
 };