From f5c02adfdbf5d9da0186fd494ee33c469445be83 Mon Sep 17 00:00:00 2001 From: Mykola Golub Date: Tue, 13 Feb 2018 14:20:09 +0200 Subject: [PATCH] librbd: potential race in RewatchRequest when resetting watch_handle Signed-off-by: Mykola Golub --- src/librbd/watcher/RewatchRequest.cc | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/librbd/watcher/RewatchRequest.cc b/src/librbd/watcher/RewatchRequest.cc index e103732e00e7..fe236269793a 100644 --- a/src/librbd/watcher/RewatchRequest.cc +++ b/src/librbd/watcher/RewatchRequest.cc @@ -40,13 +40,14 @@ void RewatchRequest::unwatch() { CephContext *cct = reinterpret_cast(m_ioctx.cct()); ldout(cct, 10) << dendl; + uint64_t watch_handle = 0; + std::swap(*m_watch_handle, watch_handle); + librados::AioCompletion *aio_comp = create_rados_callback< RewatchRequest, &RewatchRequest::handle_unwatch>(this); - int r = m_ioctx.aio_unwatch(*m_watch_handle, aio_comp); + int r = m_ioctx.aio_unwatch(watch_handle, aio_comp); assert(r == 0); aio_comp->release(); - - *m_watch_handle = 0; } void RewatchRequest::handle_unwatch(int r) { -- 2.47.3