From 740b95051b0928493e5f97a15097e26250a9b7ae Mon Sep 17 00:00:00 2001 From: Jason Dillaman Date: Mon, 14 Mar 2016 11:34:04 -0400 Subject: [PATCH] librbd: handle unregistering the image watcher when disconnected Signed-off-by: Jason Dillaman --- src/librbd/ImageWatcher.cc | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/librbd/ImageWatcher.cc b/src/librbd/ImageWatcher.cc index 2bd3c0a61cb7..ebc43ad3e71d 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) { -- 2.47.3