From: VinayBhaskar-V Date: Wed, 9 Apr 2025 05:45:33 +0000 (+0530) Subject: rbd-mirror: fix in shutdown sequence in InstanceReplayer X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=96a6070c560979a6d080ccd4af039152bfd7cc6e;p=ceph.git rbd-mirror: fix in shutdown sequence in InstanceReplayer Co-authored-by: Ilya Dryomov Signed-off-by: VinayBhaskar-V --- diff --git a/src/tools/rbd_mirror/InstanceReplayer.cc b/src/tools/rbd_mirror/InstanceReplayer.cc index 252fa801e4764..d7ea67238362e 100644 --- a/src/tools/rbd_mirror/InstanceReplayer.cc +++ b/src/tools/rbd_mirror/InstanceReplayer.cc @@ -607,9 +607,12 @@ void InstanceReplayer::handle_stop_image_replayers(int r) { } m_image_replayers.clear(); + m_image_replayers_stopped = true; + if (m_group_replayers_stopped) { + std::swap(on_finish, m_on_shut_down); + } } - if (--m_shutdown_counter == 0 ) { - std::swap(on_finish, m_on_shut_down); + if (on_finish) { on_finish->complete(r); } } @@ -799,9 +802,12 @@ void InstanceReplayer::handle_stop_group_replayers(int r) { } m_group_replayers.clear(); + m_group_replayers_stopped = true; + if (m_image_replayers_stopped) { + std::swap(on_finish, m_on_shut_down); + } } - if (--m_shutdown_counter == 0) { - std::swap(on_finish, m_on_shut_down); + if (on_finish) { on_finish->complete(r); } } diff --git a/src/tools/rbd_mirror/InstanceReplayer.h b/src/tools/rbd_mirror/InstanceReplayer.h index 93907e0a1034f..d7a390a3c5fc9 100644 --- a/src/tools/rbd_mirror/InstanceReplayer.h +++ b/src/tools/rbd_mirror/InstanceReplayer.h @@ -125,7 +125,8 @@ private: Context *m_image_state_check_task = nullptr; Context *m_group_state_check_task = nullptr; Context *m_on_shut_down = nullptr; - std::atomic m_shutdown_counter{2}; + bool m_image_replayers_stopped = false; + bool m_group_replayers_stopped = false; bool m_manual_stop = false; bool m_blocklisted = false;