msgr: generate reset event on mark_down to addr (not con)

If the caller is marking down an addr, they presumably don't have the
Connection* handy, so we should generate a reset event to help them
clean up con <-> session ref cycles.

Signed-off-by: Sage Weil <sage@inktank.com>
This commit is contained in:
Sage Weil 2013-07-16 22:43:26 -07:00 committed by Greg Farnum
parent bfadcd2a0e
commit 8dcf0b199a

View File

@ -599,9 +599,12 @@ void SimpleMessenger::mark_down(const entity_addr_t& addr)
p->pipe_lock.Lock();
p->stop();
if (p->connection_state) {
// do not generate a reset event for the caller in this case,
// since they asked for it.
p->connection_state->clear_pipe(p);
// generate a reset event for the caller in this case, even
// though they asked for it, since this is the addr-based (and
// not Connection* based) interface
ConnectionRef con = p->connection_state;
if (con && con->clear_pipe(p))
dispatch_queue.queue_reset(con.get());
}
p->pipe_lock.Unlock();
} else {