]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
msgr: close accepting_pipes from mark_down_all()
authorSage Weil <sage@inktank.com>
Tue, 16 Jul 2013 00:16:23 +0000 (17:16 -0700)
committerSage Weil <sage@inktank.com>
Wed, 17 Jul 2013 21:39:04 +0000 (14:39 -0700)
We need to catch these pipes too, particularly when doing a rebind(),
to avoid them leaking through.

Signed-off-by: Sage Weil <sage@inktank.com>
src/msg/SimpleMessenger.cc

index 0a3b33860af2d4d61d490fdf47aa712971999c19..afee0952630e5d79613b29a3ddac8ab4ccafd744 100644 (file)
@@ -561,6 +561,18 @@ void SimpleMessenger::mark_down_all()
 {
   ldout(cct,1) << "mark_down_all" << dendl;
   lock.Lock();
+  for (set<Pipe*>::iterator q = accepting_pipes.begin(); q != accepting_pipes.end(); ++q) {
+    Pipe *p = *q;
+    ldout(cct,5) << "mark_down_all accepting_pipe " << p << dendl;
+    p->pipe_lock.Lock();
+    p->stop();
+    ConnectionRef con = p->connection_state;
+    if (con && con->clear_pipe(p))
+      dispatch_queue.queue_reset(con.get());
+    p->pipe_lock.Unlock();
+  }
+  accepting_pipes.clear();
+
   while (!rank_pipe.empty()) {
     hash_map<entity_addr_t,Pipe*>::iterator it = rank_pipe.begin();
     Pipe *p = it->second;