From: Sage Weil Date: Tue, 4 Nov 2008 00:42:22 +0000 (-0800) Subject: msgr: reorder locking in mark_down() X-Git-Tag: v0.5~98 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=f0f3107aa6637ee63640fd9f076eab2f3bc3f860;p=ceph.git msgr: reorder locking in mark_down() There was a strange series of crashes when retaking Pipe::lock inside stop(). Not exactly sure why, but this simplifies locking slightly, and behaves. --- diff --git a/src/msg/SimpleMessenger.cc b/src/msg/SimpleMessenger.cc index 0b0a8643ba56..d5f89fa77f71 100644 --- a/src/msg/SimpleMessenger.cc +++ b/src/msg/SimpleMessenger.cc @@ -747,6 +747,7 @@ void Rank::mark_down(entity_addr_t addr) if (rank_pipe.count(addr)) { Pipe *p = rank_pipe[addr]; dout(2) << "mark_down " << addr << " -- " << p << dendl; + p->unregister_pipe(); lock.Unlock(); p->lock.Lock(); p->stop(); @@ -1370,6 +1371,13 @@ void Rank::Pipe::fail() for (unsigned i=0; iget_dispatcher()) rank.local[i]->queue_reset(peer_addr, last_dest_name); + + // unregister + lock.Unlock(); + rank.lock.Lock(); + unregister_pipe(); + rank.lock.Unlock(); + lock.Lock(); } void Rank::Pipe::was_session_reset() @@ -1420,13 +1428,6 @@ void Rank::Pipe::stop() if (sd >= 0) ::close(sd); sd = -1; - - // deactivate myself - lock.Unlock(); - rank.lock.Lock(); - unregister_pipe(); - rank.lock.Unlock(); - lock.Lock(); }