]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd/Watch: handle con without sessions
authorSage Weil <sage@redhat.com>
Tue, 9 Sep 2014 23:11:10 +0000 (16:11 -0700)
committerGreg Farnum <greg@inktank.com>
Fri, 19 Sep 2014 04:13:28 +0000 (21:13 -0700)
Signed-off-by: Sage Weil <sage@redhat.com>
Reviewed-by: Greg Farnum <greg@inktank.com>
src/osd/Watch.cc

index 7b324957ef0058e4798f97f6dfd079739a3bed44..7137cd81de5b77cffe5973c65092ef25b1454ea7 100644 (file)
@@ -323,12 +323,14 @@ void Watch::connect(ConnectionRef con)
   dout(10) << "connecting" << dendl;
   conn = con;
   OSD::Session* sessionref(static_cast<OSD::Session*>(con->get_priv()));
-  sessionref->wstate.addWatch(self.lock());
-  sessionref->put();
-  for (map<uint64_t, NotifyRef>::iterator i = in_progress_notifies.begin();
-       i != in_progress_notifies.end();
-       ++i) {
-    send_notify(i->second);
+  if (sessionref) {
+    sessionref->wstate.addWatch(self.lock());
+    sessionref->put();
+    for (map<uint64_t, NotifyRef>::iterator i = in_progress_notifies.begin();
+        i != in_progress_notifies.end();
+        ++i) {
+      send_notify(i->second);
+    }
   }
   unregister_cb();
 }
@@ -361,8 +363,10 @@ void Watch::discard_state()
   discarded = true;
   if (conn) {
     OSD::Session* sessionref(static_cast<OSD::Session*>(conn->get_priv()));
-    sessionref->wstate.removeWatch(self.lock());
-    sessionref->put();
+    if (sessionref) {
+      sessionref->wstate.removeWatch(self.lock());
+      sessionref->put();
+    }
     conn = ConnectionRef();
   }
   obc = ObjectContextRef();