From: Adam C. Emerson Date: Wed, 26 Nov 2025 05:59:13 +0000 (-0500) Subject: neorados: Avoid double cleanup in watch/notify X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=d4ee87e985a6f2234050fd85d31564b7776bf1e6;p=ceph.git neorados: Avoid double cleanup in watch/notify 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 --- diff --git a/src/neorados/RADOS.cc b/src/neorados/RADOS.cc index f4f2686b2c68..0f0d792283d8 100644 --- a/src/neorados/RADOS.cc +++ b/src/neorados/RADOS.cc @@ -1682,6 +1682,7 @@ struct NotifyHandler : std::enable_shared_from_this { 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 { // 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, buffer::list> reply_map;