]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
msg/DispatchQueue: release throttle on messages when dropping an id
authorSamuel Just <sam.just@inktank.com>
Thu, 15 Nov 2012 00:30:51 +0000 (16:30 -0800)
committerSage Weil <sage@inktank.com>
Thu, 15 Nov 2012 01:05:58 +0000 (17:05 -0800)
Signed-off-by: Samuel Just <sam.just@inktank.com>
src/msg/DispatchQueue.cc
src/msg/DispatchQueue.h

index 5a6dc4c79d4da686eb8f75a7acdcfb22a6f29095..5e256ebdea073f4b0b1c01f284f431317f4bb51f 100644 (file)
@@ -119,6 +119,19 @@ void DispatchQueue::entry()
   lock.Unlock();
 }
 
+void DispatchQueue::discard_queue(uint64_t id) {
+  Mutex::Locker l(lock);
+  list<QueueItem> removed;
+  mqueue.remove_by_class(id, &removed);
+  for (list<QueueItem>::iterator i = removed.begin();
+       i != removed.end();
+       ++i) {
+    assert(!(i->is_code())); // We don't discard id 0, ever!
+    msgr->dispatch_throttle_release(
+      i->get_message()->get_dispatch_throttle_size());
+  }
+}
+
 void DispatchQueue::start()
 {
   assert(!stop);
index a0239666852f251f9df228276bc0fbbd75359d5e..3ddf8aa2270700479a1c0a37ccc3bddfadde65b7 100644 (file)
@@ -140,10 +140,7 @@ class DispatchQueue {
   }
 
   void enqueue(Message *m, int priority, uint64_t id);
-  void discard_queue(uint64_t id) {
-    Mutex::Locker l(lock);
-    mqueue.remove_by_class(id);
-  }
+  void discard_queue(uint64_t id);
   uint64_t get_id() {
     Mutex::Locker l(lock);
     return next_pipe_id++;