From: Samuel Just Date: Thu, 15 Nov 2012 00:30:51 +0000 (-0800) Subject: msg/DispatchQueue: release throttle on messages when dropping an id X-Git-Tag: v0.55~93 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=12c2b7fa20be6878bc0763404d2a5c648e5fadbc;p=ceph.git msg/DispatchQueue: release throttle on messages when dropping an id Signed-off-by: Samuel Just --- diff --git a/src/msg/DispatchQueue.cc b/src/msg/DispatchQueue.cc index 5a6dc4c79d4d..5e256ebdea07 100644 --- a/src/msg/DispatchQueue.cc +++ b/src/msg/DispatchQueue.cc @@ -119,6 +119,19 @@ void DispatchQueue::entry() lock.Unlock(); } +void DispatchQueue::discard_queue(uint64_t id) { + Mutex::Locker l(lock); + list removed; + mqueue.remove_by_class(id, &removed); + for (list::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); diff --git a/src/msg/DispatchQueue.h b/src/msg/DispatchQueue.h index a0239666852f..3ddf8aa22707 100644 --- a/src/msg/DispatchQueue.h +++ b/src/msg/DispatchQueue.h @@ -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++;