From: Wei Jin Date: Fri, 6 Jan 2017 09:35:08 +0000 (+0800) Subject: msg/async: avoid atomic variable overhead X-Git-Tag: v12.0.0~228^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=2421010a47b8121d53132f5608afb42401e9a17c;p=ceph.git msg/async: avoid atomic variable overhead 1) there is already a lock to protect the count 2) no need to send signal during each callback Signed-off-by: Wei Jin --- diff --git a/src/msg/async/Stack.cc b/src/msg/async/Stack.cc index d81241eb8aaf..26d119b999cd 100644 --- a/src/msg/async/Stack.cc +++ b/src/msg/async/Stack.cc @@ -174,7 +174,7 @@ void NetworkStack::stop() class C_drain : public EventCallback { Mutex drain_lock; Cond drain_cond; - std::atomic 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); } };