diff options
author | Sage Weil <sage@inktank.com> | 2013-06-12 17:58:36 -0700 |
---|---|---|
committer | Sage Weil <sage@inktank.com> | 2013-06-13 10:53:06 -0700 |
commit | 597e4398b524eeaa46c8f6569614c415257ccc3c (patch) | |
tree | 39dd4dd0e3c4ea31b8031fe466a1194d602a44b0 | |
parent | ea6880f8a2d12d7de62c61feae9e55cf5d10c7af (diff) | |
download | ceph-597e4398b524eeaa46c8f6569614c415257ccc3c.tar.gz |
msgr: queue reset when marking down pipes on shutdown
This lets the callbacks clean up ref cycles.
Signed-off-by: Sage Weil <sage@inktank.com>
-rw-r--r-- | src/msg/SimpleMessenger.cc | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/src/msg/SimpleMessenger.cc b/src/msg/SimpleMessenger.cc index 6b1f309ac35..f1e614628df 100644 --- a/src/msg/SimpleMessenger.cc +++ b/src/msg/SimpleMessenger.cc @@ -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(); } |