]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
msgr: reaper: make sure pipe has been cleared (under pipe_lock)
authorSage Weil <sage@inktank.com>
Mon, 17 Jun 2013 20:32:38 +0000 (13:32 -0700)
committerSage Weil <sage@inktank.com>
Wed, 24 Jul 2013 23:20:35 +0000 (16:20 -0700)
All paths to pipe shutdown should have cleared the con->pipe reference
already.  Assert as much.

Also, do it under pipe_lock!

Signed-off-by: Sage Weil <sage@inktank.com>
(cherry picked from commit 9586305a2317c7d6bbf31c9cf5b67dc93ccab50d)

src/msg/SimpleMessenger.cc

index 04b364c3ded56a4ce16eb1b2c8212d7528a29cd0..c60be44e22dff87c65a8a118d82ea372b2f59c95 100644 (file)
@@ -223,6 +223,8 @@ void SimpleMessenger::reaper()
     ldout(cct,10) << "reaper reaping pipe " << p << " " << p->get_peer_addr() << dendl;
     p->pipe_lock.Lock();
     p->discard_out_queue();
+    if (p->connection_state)
+      p->connection_state->clear_pipe(p);
     p->pipe_lock.Unlock();
     p->unregister_pipe();
     assert(pipes.count(p));
@@ -231,8 +233,6 @@ void SimpleMessenger::reaper()
     if (p->sd >= 0)
       ::close(p->sd);
     ldout(cct,10) << "reaper reaped pipe " << p << " " << p->get_peer_addr() << dendl;
-    if (p->connection_state)
-      p->connection_state->clear_pipe(p);
     p->put();
     ldout(cct,10) << "reaper deleted pipe " << p << dendl;
   }