From e55b64eaecb750e4ad6db89a741c8d0d3f03a670 Mon Sep 17 00:00:00 2001 From: Mykola Golub Date: Tue, 5 May 2020 15:26:39 +0100 Subject: [PATCH] rbd-mirror: wait for in-flight start/stop/restart when stopping instance replayer on shut down. Signed-off-by: Mykola Golub --- src/tools/rbd_mirror/InstanceReplayer.cc | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/tools/rbd_mirror/InstanceReplayer.cc b/src/tools/rbd_mirror/InstanceReplayer.cc index 95bb67129dd..4ef838fa43e 100644 --- a/src/tools/rbd_mirror/InstanceReplayer.cc +++ b/src/tools/rbd_mirror/InstanceReplayer.cc @@ -274,9 +274,17 @@ void InstanceReplayer::stop(Context *on_finish) { dout(10) << dendl; + if (on_finish == nullptr) { + on_finish = new C_TrackedOp(m_async_op_tracker, on_finish); + } else { + on_finish = new LambdaContext( + [this, on_finish] (int r) { + m_async_op_tracker.wait_for_ops(on_finish); + }); + } + auto cct = static_cast(m_local_io_ctx.cct()); - auto gather_ctx = new C_Gather( - cct, new C_TrackedOp(m_async_op_tracker, on_finish)); + auto gather_ctx = new C_Gather(cct, on_finish); { std::lock_guard locker{m_lock}; -- 2.39.5