From 12c2b7fa20be6878bc0763404d2a5c648e5fadbc Mon Sep 17 00:00:00 2001 From: Samuel Just Date: Wed, 14 Nov 2012 16:30:51 -0800 Subject: [PATCH] msg/DispatchQueue: release throttle on messages when dropping an id Signed-off-by: Samuel Just --- src/msg/DispatchQueue.cc | 13 +++++++++++++ src/msg/DispatchQueue.h | 5 +---- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/msg/DispatchQueue.cc b/src/msg/DispatchQueue.cc index 5a6dc4c79d4da..5e256ebdea073 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 a0239666852f2..3ddf8aa227070 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++; -- 2.39.5