From: Sage Weil Date: Tue, 6 Oct 2015 14:54:50 +0000 (-0400) Subject: mon: do not remove proxied sessions X-Git-Tag: v9.1.0~25^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=fb50ff6250d10c300bfa135739d4fda4ac55d7c1;p=ceph.git mon: do not remove proxied sessions A proxied session (see handle_forward) isn't registered, so it doesn't need remove_session. Moreover, s->con is null, so it will crash in remove_session. Fixes: #13379 Signed-off-by: Sage Weil --- diff --git a/src/mon/Monitor.cc b/src/mon/Monitor.cc index 626718167d07..381c362b3e18 100644 --- a/src/mon/Monitor.cc +++ b/src/mon/Monitor.cc @@ -3321,6 +3321,7 @@ void Monitor::resend_routed_requests() void Monitor::remove_session(MonSession *s) { dout(10) << "remove_session " << s << " " << s->inst << dendl; + assert(s->con); assert(!s->closed); for (set::iterator p = s->routed_request_tids.begin(); p != s->routed_request_tids.end(); @@ -3387,7 +3388,10 @@ void Monitor::waitlist_or_zap_client(MonOpRequestRef op) } else { dout(5) << "discarding message " << *m << " and sending client elsewhere" << dendl; con->mark_down(); - remove_session(s); + // proxied sessions aren't registered and don't have a con; don't remove + // those. + if (!s->proxy_con) + remove_session(s); op->mark_zap(); } }