From: Mykola Golub Date: Mon, 2 Jul 2018 09:17:08 +0000 (+0300) Subject: librbd: AsyncOperation may not be reused X-Git-Tag: v14.0.1~590^2~3 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=57ee7e14911f539102158dd44bfb99e94d36423b;p=ceph.git librbd: AsyncOperation may not be reused Signed-off-by: Mykola Golub --- diff --git a/src/librbd/operation/MigrateRequest.cc b/src/librbd/operation/MigrateRequest.cc index f7ec41621d66..18737f01e286 100644 --- a/src/librbd/operation/MigrateRequest.cc +++ b/src/librbd/operation/MigrateRequest.cc @@ -58,7 +58,7 @@ private: ::SnapContext m_snapc; uint64_t m_object_no; - io::AsyncOperation m_async_op; + io::AsyncOperation *m_async_op = nullptr; void start_async_op() { I &image_ctx = this->m_image_ctx; @@ -66,7 +66,9 @@ private: CephContext *cct = image_ctx.cct; ldout(cct, 10) << dendl; - m_async_op.start_op(image_ctx); + assert(m_async_op == nullptr); + m_async_op = new io::AsyncOperation(); + m_async_op->start_op(image_ctx); if (!image_ctx.io_work_queue->writes_blocked()) { migrate_object(); @@ -76,7 +78,9 @@ private: auto ctx = create_async_context_callback( image_ctx, create_context_callback< C_MigrateObject, &C_MigrateObject::handle_start_async_op>(this)); - m_async_op.finish_op(); + m_async_op->finish_op(); + delete m_async_op; + m_async_op = nullptr; image_ctx.io_work_queue->wait_on_writes_unblocked(ctx); } @@ -145,7 +149,8 @@ private: r = 0; } - m_async_op.finish_op(); + m_async_op->finish_op(); + delete m_async_op; this->complete(r); } };