]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
msg/Pipe: release dispatch throttle on delayed queue discard
authorSage Weil <sage@inktank.com>
Thu, 29 Nov 2012 18:49:47 +0000 (10:49 -0800)
committerSage Weil <sage@inktank.com>
Fri, 30 Nov 2012 00:09:45 +0000 (16:09 -0800)
This avoids leaking into the throttle and deadlocking.

Signed-off-by: Sage Weil <sage@inktank.com>
src/msg/Pipe.cc
src/msg/Pipe.h

index f6061564444f6c8b24af1fee92528254a089ce90..2bbaf0bc17f6c04d977e26f1732aa0e10428bfa3 100644 (file)
@@ -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;
index 4754a530585dfbf1322c8149e96a523e59938535..30fb7eede11322842bd3e044edb47e670de190ac 100644 (file)
@@ -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;