From: Samuel Just Date: Tue, 29 Nov 2016 20:30:30 +0000 (-0800) Subject: Pipe::stop_and_wait: unlock pipe_lock for stop_fast_dispatching() X-Git-Tag: v11.1.0~61^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=a56b4b296fad0562db81f8a68fb22bf44884fb15;p=ceph.git Pipe::stop_and_wait: unlock pipe_lock for stop_fast_dispatching() OSD::ms_fast_dispatch may need the pipe_lock to finish what it's doing and avoid a deadlock. Fixes: http://tracker.ceph.com/issues/18042 Signed-off-by: Samuel Just --- diff --git a/src/msg/simple/Pipe.cc b/src/msg/simple/Pipe.cc index c57790d05664..5edec546bee5 100644 --- a/src/msg/simple/Pipe.cc +++ b/src/msg/simple/Pipe.cc @@ -1561,6 +1561,7 @@ void Pipe::stop() void Pipe::stop_and_wait() { + assert(pipe_lock.is_locked_by_me()); if (state != STATE_CLOSED) stop(); @@ -1574,7 +1575,9 @@ void Pipe::stop_and_wait() } if (delay_thread) { + pipe_lock.Unlock(); delay_thread->stop_fast_dispatching(); + pipe_lock.Lock(); } while (reader_running && reader_dispatching)