diff options
author | Sage Weil <sage@inktank.com> | 2013-08-13 13:14:59 -0700 |
---|---|---|
committer | Sage Weil <sage@inktank.com> | 2013-08-13 13:21:01 -0700 |
commit | 6f5d8036f3e70c5e30edf7e36fb8ff9a56197f60 (patch) | |
tree | 00316fb51c425c4b07f1c84a6e6b0a0d72ee9aea | |
parent | 810c52de36719c3ee6cf2bdf59d5cde8840bbe55 (diff) | |
download | ceph-6f5d8036f3e70c5e30edf7e36fb8ff9a56197f60.tar.gz |
librados: fix MWatchNotify leak
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>
-rw-r--r-- | src/librados/RadosClient.cc | 15 |
1 files changed, 6 insertions, 9 deletions
diff --git a/src/librados/RadosClient.cc b/src/librados/RadosClient.cc index 48b6a3cabf6..8a5f499ec15 100644 --- a/src/librados/RadosClient.cc +++ b/src/librados/RadosClient.cc @@ -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(); } |