From 03b8ed3b6c503d71049e42544fa7e5c71e68c98d Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Tue, 15 Sep 2015 12:46:25 -0400 Subject: [PATCH] msg/simple: discard local queued messages on shutdown Otherwise these generate leak detection noise. Signed-off-by: Sage Weil --- src/msg/simple/DispatchQueue.cc | 11 +++++++++++ src/msg/simple/DispatchQueue.h | 1 + src/msg/simple/SimpleMessenger.cc | 3 ++- 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/msg/simple/DispatchQueue.cc b/src/msg/simple/DispatchQueue.cc index c47ee72b81848..500239f29ab1b 100644 --- a/src/msg/simple/DispatchQueue.cc +++ b/src/msg/simple/DispatchQueue.cc @@ -227,6 +227,17 @@ void DispatchQueue::wait() dispatch_thread.join(); } +void DispatchQueue::discard_local() +{ + for (list >::iterator p = local_messages.begin(); + p != local_messages.end(); + ++p) { + ldout(cct,20) << __func__ << " " << p->first << dendl; + p->first->put(); + } + local_messages.clear(); +} + void DispatchQueue::shutdown() { // stop my local delivery thread diff --git a/src/msg/simple/DispatchQueue.h b/src/msg/simple/DispatchQueue.h index 606b850240792..d379f55881cf7 100644 --- a/src/msg/simple/DispatchQueue.h +++ b/src/msg/simple/DispatchQueue.h @@ -180,6 +180,7 @@ class DispatchQueue { void fast_preprocess(Message *m); void enqueue(Message *m, int priority, uint64_t id); void discard_queue(uint64_t id); + void discard_local(); uint64_t get_id() { Mutex::Locker l(lock); return next_pipe_id++; diff --git a/src/msg/simple/SimpleMessenger.cc b/src/msg/simple/SimpleMessenger.cc index fc4b48b213c95..fdb7278292d48 100644 --- a/src/msg/simple/SimpleMessenger.cc +++ b/src/msg/simple/SimpleMessenger.cc @@ -534,9 +534,10 @@ void SimpleMessenger::wait() } lock.Unlock(); - if(dispatch_queue.is_started()) { + if (dispatch_queue.is_started()) { ldout(cct,10) << "wait: waiting for dispatch queue" << dendl; dispatch_queue.wait(); + dispatch_queue.discard_local(); ldout(cct,10) << "wait: dispatch queue is stopped" << dendl; } -- 2.39.5