From: Mykola Golub Date: Tue, 5 May 2020 14:26:39 +0000 (+0100) Subject: rbd-mirror: wait for in-flight start/stop/restart X-Git-Tag: v16.1.0~2237^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=e55b64eaecb750e4ad6db89a741c8d0d3f03a670;p=ceph.git rbd-mirror: wait for in-flight start/stop/restart when stopping instance replayer on shut down. Signed-off-by: Mykola Golub --- diff --git a/src/tools/rbd_mirror/InstanceReplayer.cc b/src/tools/rbd_mirror/InstanceReplayer.cc index 95bb67129ddb..4ef838fa43eb 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};