From: Haomai Wang Date: Fri, 8 Jan 2016 03:49:59 +0000 (+0800) Subject: AsyncMessenger: reap dead accepting connection too X-Git-Tag: v10.0.3~29^2~4 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=8b13281901df77a9daaabf862e32fe62c75d6b19;p=ceph.git AsyncMessenger: reap dead accepting connection too Signed-off-by: Haomai Wang --- diff --git a/src/msg/async/AsyncMessenger.cc b/src/msg/async/AsyncMessenger.cc index 35f688bd346..5eabde14c80 100644 --- a/src/msg/async/AsyncMessenger.cc +++ b/src/msg/async/AsyncMessenger.cc @@ -743,14 +743,17 @@ int AsyncMessenger::reap_dead(bool is_timer) { int num; - Mutex::Locker l(lock); - Mutex::Locker l(deleted_lock); + Mutex::Locker l1(lock); + Mutex::Locker l2(deleted_lock); while (!deleted_conns.empty()) { - set::iterator it = deleted_conns.begin(); + auto it = deleted_conns.begin(); AsyncConnectionRef p = *it; ldout(cct, 5) << __func__ << " delete " << p << dendl; - conns.erase(p); + auto conns_it = conns.find(p->peer_addr); + if (conns_it->second == p) + conns.erase(conns_it); + accepting_conns.erase(p); deleted_conns.erase(it); ++num; } diff --git a/src/msg/async/AsyncMessenger.h b/src/msg/async/AsyncMessenger.h index 7fb702fec35..812d2ee478f 100644 --- a/src/msg/async/AsyncMessenger.h +++ b/src/msg/async/AsyncMessenger.h @@ -381,7 +381,6 @@ private: * * These are not yet in the conns map. */ - // FIXME clear up set accepting_conns; /** @@ -530,9 +529,9 @@ public: deleted_conns.insert(conn); if (deleted_conns.size() >= ReapDeadConnectionThreshold) { - local_worker->dispatch_event_external(reap_handler); + local_worker->center.dispatch_event_external(reap_handler); } else if (!reap_time_fd) { - reap_time_fd = local_worker->create_time_event( + reap_time_fd = local_worker->center.create_time_event( ReapDeadConnectionMaxPeriod, reap_handler); } }