From: Samuel Just Date: Wed, 6 Jan 2016 00:24:15 +0000 (-0800) Subject: OpRequest: release the message throttle when unregistered X-Git-Tag: v0.94.10~53^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=a56b93faf2ae8db2ebe55aaf6003a48ac2bfb8b2;p=ceph.git OpRequest: release the message throttle when unregistered We don't want messages in the OpTracker history hanging on to message throttle. Fixes: #14248 Backport: hammer, firefly Signed-off-by: Samuel Just (cherry picked from commit 67be35cba7c384353b0b6d49284a4ead94c4152e) Conflicts: src/msg/Message.h (s/nullptr/0/ because C++98) --- diff --git a/src/msg/Message.h b/src/msg/Message.h index c2cd1238150e..639dd0f934ae 100644 --- a/src/msg/Message.h +++ b/src/msg/Message.h @@ -294,8 +294,7 @@ protected: virtual ~Message() { if (byte_throttler) byte_throttler->put(payload.length() + middle.length() + data.length()); - if (msg_throttler) - msg_throttler->put(); + release_message_throttle(); /* call completion hooks (if any) */ if (completion_hook) completion_hook->complete(0); @@ -345,6 +344,11 @@ public: data.clear(); clear_buffers(); // let subclass drop buffers as well } + void release_message_throttle() { + if (msg_throttler) + msg_throttler->put(); + msg_throttler = 0; // nullptr + } bool empty_payload() { return payload.length() == 0; } bufferlist& get_payload() { return payload; } diff --git a/src/osd/OpRequest.cc b/src/osd/OpRequest.cc index 37b3aec4d6e6..81d548a89f9a 100644 --- a/src/osd/OpRequest.cc +++ b/src/osd/OpRequest.cc @@ -80,6 +80,7 @@ void OpRequest::_dump_op_descriptor_unlocked(ostream& stream) const void OpRequest::_unregistered() { request->clear_data(); request->clear_payload(); + request->release_message_throttle(); } bool OpRequest::check_rmw(int flag) {