From: Mykola Golub Date: Fri, 13 Dec 2019 13:16:17 +0000 (+0200) Subject: rbd-mirror: fix race on namespace replayer initialization failure X-Git-Tag: v15.1.0~493^2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=dce1b3609cad89b3e1177a6da925e38c5e217f79;p=ceph-ci.git rbd-mirror: fix race on namespace replayer initialization failure Fixes: https://tracker.ceph.com/issues/43289 Signed-off-by: Mykola Golub --- diff --git a/src/tools/rbd_mirror/PoolReplayer.cc b/src/tools/rbd_mirror/PoolReplayer.cc index 75ddc5fd956..5e822e84213 100644 --- a/src/tools/rbd_mirror/PoolReplayer.cc +++ b/src/tools/rbd_mirror/PoolReplayer.cc @@ -609,13 +609,13 @@ void PoolReplayer::update_namespace_replayers() { auto on_init = new LambdaContext( [this, namespace_replayer, name, &mirroring_namespaces, ctx=gather_ctx->new_sub()](int r) { + std::lock_guard locker{m_lock}; if (r < 0) { derr << "failed to initialize namespace replayer for namespace " << name << ": " << cpp_strerror(r) << dendl; delete namespace_replayer; mirroring_namespaces.erase(name); } else { - std::lock_guard locker{m_lock}; m_namespace_replayers[name] = namespace_replayer; m_service_daemon->add_namespace(m_local_pool_id, name); }