]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
neorados: Avoid double cleanup in watch/notify
authorAdam C. Emerson <aemerson@redhat.com>
Wed, 26 Nov 2025 05:59:13 +0000 (00:59 -0500)
committerAdam C. Emerson <aemerson@redhat.com>
Mon, 16 Mar 2026 15:55:50 +0000 (11:55 -0400)
An error coming in after `maybe_cleanup()` is called could trigger it
again. Add a flag to prevent that.

Signed-off-by: Adam C. Emerson <aemerson@redhat.com>
src/neorados/RADOS.cc

index f4f2686b2c6899a279948604dfc0d76e3d1db305..0f0d792283d89ce8fd767e591608956873a376bb 100644 (file)
@@ -1682,6 +1682,7 @@ struct NotifyHandler : std::enable_shared_from_this<NotifyHandler> {
   bool finished = false;
   bs::error_code res;
   bufferlist rbl;
+  bool cleaned = false;
 
   NotifyHandler(asio::io_context& ioc,
                Objecter* objecter,
@@ -1716,9 +1717,13 @@ struct NotifyHandler : std::enable_shared_from_this<NotifyHandler> {
 
   // Should be called from strand.
   void maybe_cleanup(bs::error_code ec) {
+    if (cleaned) {
+      return;
+    }
     if (!res && ec)
       res = ec;
     if ((acked && finished) || res) {
+      cleaned = true;
       objecter->linger_cancel(op.get());
       ceph_assert(c);
       bc::flat_map<std::pair<uint64_t, uint64_t>, buffer::list> reply_map;