From 6d65fa4ef9f17ce7994e19674d93012aa23f6eb0 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Thu, 29 Nov 2012 10:49:47 -0800 Subject: [PATCH] msg/Pipe: release dispatch throttle on delayed queue discard This avoids leaking into the throttle and deadlocking. Signed-off-by: Sage Weil --- src/msg/Pipe.cc | 12 +++++++++++- src/msg/Pipe.h | 8 +------- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/msg/Pipe.cc b/src/msg/Pipe.cc index f6061564444f6..2bbaf0bc17f6c 100644 --- a/src/msg/Pipe.cc +++ b/src/msg/Pipe.cc @@ -158,6 +158,17 @@ void Pipe::join_reader() reader_needs_join = false; } +void Pipe::DelayedDelivery::discard() +{ + Mutex::Locker l(delay_lock); + while (!delay_queue.empty()) { + Message *m = delay_queue.front().second; + pipe->msgr->dispatch_throttle_release(m->get_dispatch_throttle_size()); + m->put(); + delay_queue.pop_front(); + } +} + void *Pipe::DelayedDelivery::entry() { Mutex::Locker locker(delay_lock); @@ -1053,7 +1064,6 @@ void Pipe::discard_out_queue() out_q.clear(); } - void Pipe::fault(bool onread) { const md_config_t *conf = msgr->cct->_conf; diff --git a/src/msg/Pipe.h b/src/msg/Pipe.h index 4754a530585df..30fb7eede1132 100644 --- a/src/msg/Pipe.h +++ b/src/msg/Pipe.h @@ -89,13 +89,7 @@ class DispatchQueue; delay_queue.push_back(make_pair(release, m)); delay_cond.Signal(); } - void discard() { - Mutex::Locker l(delay_lock); - while (!delay_queue.empty()) { - delay_queue.front().second->put(); - delay_queue.pop_front(); - } - } + void discard(); void stop() { delay_lock.Lock(); stop_delayed_delivery = true; -- 2.39.5