From b05e184c07bed126758dd12f3e31fa79aa4ccfc0 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Thu, 19 Nov 2009 11:45:17 -0800 Subject: [PATCH] mon: only remove_session if !s->closed --- src/mon/Monitor.cc | 4 +++- src/mon/Session.h | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/mon/Monitor.cc b/src/mon/Monitor.cc index 68d372505b79e..2b5f94c094610 100644 --- a/src/mon/Monitor.cc +++ b/src/mon/Monitor.cc @@ -424,6 +424,7 @@ void Monitor::resend_routed_requests() void Monitor::remove_session(Session *s) { dout(10) << "remove_session " << s << " " << s->inst << dendl; + assert(!s->closed); for (set<__u64>::iterator p = s->routed_request_tids.begin(); p != s->routed_request_tids.end(); p++) { @@ -735,7 +736,8 @@ bool Monitor::ms_handle_reset(Connection *con) Mutex::Locker l(lock); dout(10) << "reset/close on session " << s->inst << dendl; - remove_session(s); + if (!s->closed) + remove_session(s); s->put(); // remove from connection, too. diff --git a/src/mon/Session.h b/src/mon/Session.h index 888ed1dc79021..ddcb7e106aebf 100644 --- a/src/mon/Session.h +++ b/src/mon/Session.h @@ -66,6 +66,7 @@ struct SessionMap { multimap by_osd; void remove_session(Session *s) { + assert(!s->closed); for (map::iterator p = s->sub_map.begin(); p != s->sub_map.end(); ++p) p->second->type_item.remove_myself(); s->sub_map.clear(); -- 2.39.5