]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
AsyncMessenger: reap dead accepting connection too
authorHaomai Wang <haomai@xsky.com>
Fri, 8 Jan 2016 03:49:59 +0000 (11:49 +0800)
committerHaomai Wang <haomai@xsky.com>
Wed, 13 Jan 2016 15:24:11 +0000 (23:24 +0800)
Signed-off-by: Haomai Wang <haomai@xsky.com>
src/msg/async/AsyncMessenger.cc
src/msg/async/AsyncMessenger.h

index 35f688bd34615e4b0fa9ab0e0c8ede7bf398003c..5eabde14c800f3fcabd0351b1605308d4b5963d8 100644 (file)
@@ -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<AsyncConnectionRef>::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;
   }
index 7fb702fec35fda12ca32b897adcae2efa95a8483..812d2ee478fe59407ef691873d67a929484ee3b9 100644 (file)
@@ -381,7 +381,6 @@ private:
    *
    * These are not yet in the conns map.
    */
-  // FIXME clear up
   set<AsyncConnectionRef> 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);
     }
   }