]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
msg/simple: discard local queued messages on shutdown
authorSage Weil <sage@redhat.com>
Tue, 15 Sep 2015 16:46:25 +0000 (12:46 -0400)
committerSage Weil <sage@redhat.com>
Tue, 15 Sep 2015 17:58:37 +0000 (13:58 -0400)
Otherwise these generate leak detection noise.

Signed-off-by: Sage Weil <sage@redhat.com>
src/msg/simple/DispatchQueue.cc
src/msg/simple/DispatchQueue.h
src/msg/simple/SimpleMessenger.cc

index c47ee72b81848f3cf837e319f802559beb99d732..500239f29ab1b832cb807436c9966862400f9016 100644 (file)
@@ -227,6 +227,17 @@ void DispatchQueue::wait()
   dispatch_thread.join();
 }
 
+void DispatchQueue::discard_local()
+{
+  for (list<pair<Message *, int> >::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
index 606b850240792229ee2f91f8bbf8c1bbc641859f..d379f55881cf7b9ecb61b5c855166eb5fc955077 100644 (file)
@@ -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++;
index fc4b48b213c951b4351bf7501395d0da02e02116..fdb7278292d48a631c508d2966746e233fb455ab 100644 (file)
@@ -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;
   }