]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: only remove_session if !s->closed
authorSage Weil <sage@newdream.net>
Thu, 19 Nov 2009 19:45:17 +0000 (11:45 -0800)
committerSage Weil <sage@newdream.net>
Thu, 19 Nov 2009 20:41:04 +0000 (12:41 -0800)
src/mon/Monitor.cc
src/mon/Session.h

index 68d372505b79e509c4cded7d6db0546abf104d60..2b5f94c0946106c01ff7477effd4750276fe80ec 100644 (file)
@@ -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.
index 888ed1dc790212533678df71189963313d439d19..ddcb7e106aebf0aa5f02321892eb60068f2234ff 100644 (file)
@@ -66,6 +66,7 @@ struct SessionMap {
   multimap<int, Session*> by_osd;
 
   void remove_session(Session *s) {
+    assert(!s->closed);
     for (map<nstring,Subscription*>::iterator p = s->sub_map.begin(); p != s->sub_map.end(); ++p)
       p->second->type_item.remove_myself();
     s->sub_map.clear();