From: Kefu Chai Date: Mon, 26 Nov 2018 10:49:12 +0000 (+0800) Subject: Merge pull request #25105 from tchaikov/wip-ceph-mutex-common X-Git-Tag: v14.1.0~820 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=b7def6f79738da01bec4300aca0ec92c6b8beebd;p=ceph.git Merge pull request #25105 from tchaikov/wip-ceph-mutex-common common: Mutex -> ceph::mutex Reviewed-by: Sage Weil Reviewed-by: Adam Emerson Reviewed-by: Josh Durgin --- b7def6f79738da01bec4300aca0ec92c6b8beebd diff --cc src/common/Throttle.cc index d933a86f333d,c80ad2b571e1..4d0e34096647 --- a/src/common/Throttle.cc +++ b/src/common/Throttle.cc @@@ -790,11 -796,9 +796,11 @@@ uint64_t TokenBucketThrottle::tokens_th void TokenBucketThrottle::add_tokens() { list tmp_blockers; { - std::lock_guard lock(m_lock); + std::lock_guard lock(m_lock); // put tokens into bucket. m_throttle.put(tokens_this_tick()); + if (0 == m_avg || 0 == m_throttle.max) + tmp_blockers.swap(m_blockers); // check the m_blockers from head to tail, if blocker can get // enough tokens, let it go. while (!m_blockers.empty()) { diff --cc src/common/Throttle.h index a70b28c0c19f,5b31366d9faa..0164dc9815ab --- a/src/common/Throttle.h +++ b/src/common/Throttle.h @@@ -422,12 -421,12 +421,12 @@@ public template bool get(uint64_t c, T *handler, I *item, uint64_t flag) { - if (0 == m_avg) + if (0 == c) return false; - + bool wait = false; uint64_t got = 0; - std::lock_guard lock(m_lock); + std::lock_guard lock(m_lock); if (!m_blockers.empty()) { // Keep the order of requests, add item after previous blocked requests. wait = true;