]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
msgr: queue reset when marking down pipes on shutdown
authorSage Weil <sage@inktank.com>
Thu, 13 Jun 2013 00:58:36 +0000 (17:58 -0700)
committerSage Weil <sage@inktank.com>
Thu, 13 Jun 2013 17:53:06 +0000 (10:53 -0700)
This lets the callbacks clean up ref cycles.

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

index 6b1f309ac3505b714cae4b606762fb9e98a42ab7..f1e614628df1f9be5aae42294a9e01f20d115ee4 100644 (file)
@@ -83,8 +83,8 @@ void SimpleMessenger::ready()
 int SimpleMessenger::shutdown()
 {
   ldout(cct,10) << "shutdown " << get_myaddr() << dendl;
-  dispatch_queue.shutdown();
   mark_down_all();
+  dispatch_queue.shutdown();
   return 0;
 }
 
@@ -562,7 +562,10 @@ void SimpleMessenger::mark_down_all()
     p->unregister_pipe();
     p->pipe_lock.Lock();
     p->stop();
+    ConnectionRef con = p->connection_state;
     p->pipe_lock.Unlock();
+    if (con && con->clear_pipe(p))
+      dispatch_queue.queue_reset(con.get());
   }
   lock.Unlock();
 }