From da055809ed3712cf144b1bd2850e479d2c5fb926 Mon Sep 17 00:00:00 2001 From: Haomai Wang Date: Fri, 8 Jan 2016 01:41:47 +0800 Subject: [PATCH] AsyncMessenger: Add reap_dead to collect unused connection ref Signed-off-by: Haomai Wang --- src/msg/async/AsyncMessenger.cc | 18 ++++++++++++++++++ src/msg/async/AsyncMessenger.h | 10 ++++++++++ 2 files changed, 28 insertions(+) diff --git a/src/msg/async/AsyncMessenger.cc b/src/msg/async/AsyncMessenger.cc index 258e8dd5dc4a0..d1c6245234437 100644 --- a/src/msg/async/AsyncMessenger.cc +++ b/src/msg/async/AsyncMessenger.cc @@ -736,3 +736,21 @@ void AsyncMessenger::learned_addr(const entity_addr_t &peer_addr_for_me) } lock.Unlock(); } + +int AsyncMessenger::reap_dead(int max) +{ + int num; + Mutex::Locker l(lock); + Mutex::Locker l(deleted_lock); + + while (!deleted_conns.empty() && num < max) { + set::iterator it = deleted_conns.begin(); + AsyncConnectionRef p = *it; + ldout(cct, 5) << __func__ << " delete " << p << dendl; + conns.erase(p); + deleted_conns.erase(it); + ++num; + } + + return num; +} diff --git a/src/msg/async/AsyncMessenger.h b/src/msg/async/AsyncMessenger.h index 59f9f3a2cc604..5ff1aba98a8a3 100644 --- a/src/msg/async/AsyncMessenger.h +++ b/src/msg/async/AsyncMessenger.h @@ -510,6 +510,16 @@ public: Mutex::Locker l(deleted_lock); deleted_conns.insert(conn); } + + /** + * Reap dead connection from `deleted_conns` + * + * @return the number of dead connections + * + * See "deleted_conns" + */ + int reap_dead(int max); + /** * @} // AsyncMessenger Internals */ -- 2.39.5