From: Jason Dillaman Date: Mon, 27 Jun 2016 13:05:33 +0000 (-0400) Subject: rbd-mirror: clean up ImageReplayer before stopping state machine X-Git-Tag: v11.0.0~11^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F9958%2Fhead;p=ceph.git rbd-mirror: clean up ImageReplayer before stopping state machine Fixes: http://tracker.ceph.com/issues/16489 Signed-off-by: Jason Dillaman --- diff --git a/src/tools/rbd_mirror/ImageReplayer.cc b/src/tools/rbd_mirror/ImageReplayer.cc index 19da8882f7ed..c46be344ef04 100644 --- a/src/tools/rbd_mirror/ImageReplayer.cc +++ b/src/tools/rbd_mirror/ImageReplayer.cc @@ -1325,7 +1325,6 @@ template void ImageReplayer::handle_shut_down(int r, Context *on_start) { reschedule_update_status_task(-1); - Context *on_stop = nullptr; { Mutex::Locker locker(m_lock); @@ -1357,7 +1356,18 @@ void ImageReplayer::handle_shut_down(int r, Context *on_start) { ctx, false); return; } + } + + dout(20) << "stop complete" << dendl; + m_local_ioctx.close(); + m_remote_ioctx.close(); + delete m_replay_status_formatter; + m_replay_status_formatter = nullptr; + + Context *on_stop = nullptr; + { + Mutex::Locker locker(m_lock); std::swap(on_stop, m_on_stop_finish); m_stop_requested = false; assert(m_state == STATE_STOPPING); @@ -1365,13 +1375,6 @@ void ImageReplayer::handle_shut_down(int r, Context *on_start) { m_state_desc.clear(); m_last_r = 0; } - dout(20) << "stop complete" << dendl; - - m_local_ioctx.close(); - m_remote_ioctx.close(); - - delete m_replay_status_formatter; - m_replay_status_formatter = nullptr; if (on_start != nullptr) { dout(20) << "on start finish complete, r=" << r << dendl;