]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
client: fix use-after-free on session close and cond signals
authorSage Weil <sage@inktank.com>
Mon, 1 Apr 2013 04:05:49 +0000 (21:05 -0700)
committerSage Weil <sage@inktank.com>
Mon, 1 Apr 2013 04:43:57 +0000 (21:43 -0700)
Move the signal into the closed method, before we deallocate the
MetaSession, so that other callers catch it too.

Signed-off-by: Sage Weil <sage@inktank.com>
src/client/Client.cc

index e81e60cca69454ab12d0b8775251e6cc420b2082..18fd7aae4f429af19c9bf6aaa1016fa0099243ee 100644 (file)
@@ -1512,6 +1512,7 @@ void Client::_closed_mds_session(MetaSession *s)
 {
   s->state = MetaSession::STATE_CLOSED;
   messenger->mark_down(s->con);
+  signal_cond_list(s->waiting_for_open);
   mount_cond.Signal();
   remove_session_caps(s);
   kick_requests(s, true);
@@ -1545,7 +1546,6 @@ void Client::handle_client_session(MClientSession *m)
 
   case CEPH_SESSION_CLOSE:
     _closed_mds_session(session);
-    signal_cond_list(session->waiting_for_open);
     break;
 
   case CEPH_SESSION_RENEWCAPS: