From: Jason Dillaman Date: Mon, 14 Mar 2016 15:34:04 +0000 (-0400) Subject: librbd: handle unregistering the image watcher when disconnected X-Git-Tag: v10.1.0~109^2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=740b95051b0928493e5f97a15097e26250a9b7ae;p=ceph-ci.git librbd: handle unregistering the image watcher when disconnected Signed-off-by: Jason Dillaman --- diff --git a/src/librbd/ImageWatcher.cc b/src/librbd/ImageWatcher.cc index 2bd3c0a61cb..ebc43ad3e71 100644 --- a/src/librbd/ImageWatcher.cc +++ b/src/librbd/ImageWatcher.cc @@ -123,14 +123,20 @@ void ImageWatcher::unregister_watch(Context *on_finish) { { RWLock::WLocker l(m_watch_lock); if (m_watch_state == WATCH_STATE_REGISTERED) { + m_watch_state = WATCH_STATE_UNREGISTERED; + librados::AioCompletion *aio_comp = create_rados_safe_callback( new C_UnwatchAndFlush(m_image_ctx.md_ctx, on_finish)); int r = m_image_ctx.md_ctx.aio_unwatch(m_watch_handle, aio_comp); assert(r == 0); aio_comp->release(); + return; + } else if (m_watch_state == WATCH_STATE_ERROR) { + m_watch_state = WATCH_STATE_UNREGISTERED; } - m_watch_state = WATCH_STATE_UNREGISTERED; } + + on_finish->complete(0); } void ImageWatcher::flush(Context *on_finish) {