]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
librados: fix MWatchNotify leak
authorSage Weil <sage@inktank.com>
Tue, 13 Aug 2013 20:14:59 +0000 (13:14 -0700)
committerSage Weil <sage@inktank.com>
Tue, 20 Aug 2013 15:11:03 +0000 (08:11 -0700)
Do not leak the message if the watcher is not registered.  Also, simplify
this block.

Fixes (part of): #5949
Backport: dumpling, cuttlefish
Signed-off-by: Sage Weil <sage@inktank.com>
Reviewed-by: Yehuda Sadeh <yehuda@inktank.com>
(cherry picked from commit 6f5d8036f3e70c5e30edf7e36fb8ff9a56197f60)

src/librados/RadosClient.cc

index 48b6a3cabf60fdd27898255cb86c5fcd879be770..8a5f499ec15260b0802e726a24bcfc4c8ba7bdf0 100644 (file)
@@ -563,16 +563,13 @@ public:
 void librados::RadosClient::watch_notify(MWatchNotify *m)
 {
   assert(lock.is_locked());
-  WatchContext *wc = NULL;
   map<uint64_t, WatchContext *>::iterator iter = watchers.find(m->cookie);
-  if (iter != watchers.end())
-    wc = iter->second;
-
-  if (!wc)
-    return;
-
-  wc->get();
-  finisher.queue(new C_WatchNotify(wc, &lock, m->opcode, m->ver, m->notify_id, m->bl));
+  if (iter != watchers.end()) {
+    WatchContext *wc = iter->second;
+    assert(wc);
+    wc->get();
+    finisher.queue(new C_WatchNotify(wc, &lock, m->opcode, m->ver, m->notify_id, m->bl));
+  }
   m->put();
 }