]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rbd-mirror: fix in shutdown sequence in InstanceReplayer
authorVinayBhaskar-V <vvarada@redhat.com>
Wed, 9 Apr 2025 05:45:33 +0000 (11:15 +0530)
committerPrasanna Kumar Kalever <prasanna.kalever@redhat.com>
Thu, 24 Apr 2025 15:56:38 +0000 (21:26 +0530)
Co-authored-by: Ilya Dryomov <idryomov@gmail.com>
Signed-off-by: VinayBhaskar-V <vvarada@redhat.com>
src/tools/rbd_mirror/InstanceReplayer.cc
src/tools/rbd_mirror/InstanceReplayer.h

index 252fa801e47642b118672c5ff870957b1f2525ac..d7ea67238362e35447227e683d229a0083178e2f 100644 (file)
@@ -607,9 +607,12 @@ void InstanceReplayer<I>::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<I>::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);
   }
 }
index 93907e0a1034fe8e06d65c87607acc02697658d3..d7a390a3c5fc98b38a9d0e597a3f36319970ff80 100644 (file)
@@ -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<int> 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;