]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
OpRequest: release the message throttle when unregistered 11938/head
authorSamuel Just <sjust@redhat.com>
Wed, 6 Jan 2016 00:24:15 +0000 (16:24 -0800)
committerNathan Cutler <ncutler@suse.com>
Sat, 12 Nov 2016 13:42:55 +0000 (14:42 +0100)
We don't want messages in the OpTracker history hanging on to
message throttle.

Fixes: #14248
Backport: hammer, firefly
Signed-off-by: Samuel Just <sjust@redhat.com>
(cherry picked from commit 67be35cba7c384353b0b6d49284a4ead94c4152e)

Conflicts:
    src/msg/Message.h (s/nullptr/0/ because C++98)

src/msg/Message.h
src/osd/OpRequest.cc

index c2cd1238150e71be5420ea497ee3433eb9a9b957..639dd0f934aea20fff14c50480310e1b4b1a7ef1 100644 (file)
@@ -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; }
index 37b3aec4d6e6fc7f63805af4795d8ac932b3b1b5..81d548a89f9af83b7de4d6730e92b07fee0cfe80 100644 (file)
@@ -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) {