From 96563c15159d1ba0e0978e76b8df6a8ab311e5d2 Mon Sep 17 00:00:00 2001 From: Haomai Wang Date: Thu, 28 Jan 2016 17:13:00 +0800 Subject: [PATCH] librbd: use task finisher per CephContext Signed-off-by: Haomai Wang --- src/librbd/ImageWatcher.cc | 5 +++-- src/librbd/TaskFinisher.h | 8 ++++---- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/librbd/ImageWatcher.cc b/src/librbd/ImageWatcher.cc index b97d502d04c..2c5331ccf16 100644 --- a/src/librbd/ImageWatcher.cc +++ b/src/librbd/ImageWatcher.cc @@ -34,15 +34,16 @@ ImageWatcher::ImageWatcher(ImageCtx &image_ctx) m_watch_lock(util::unique_lock_name("librbd::ImageWatcher::m_watch_lock", this)), m_watch_ctx(*this), m_watch_handle(0), m_watch_state(WATCH_STATE_UNREGISTERED), - m_task_finisher(new TaskFinisher(*m_image_ctx.cct)), m_async_request_lock(util::unique_lock_name("librbd::ImageWatcher::m_async_request_lock", this)), m_owner_client_id_lock(util::unique_lock_name("librbd::ImageWatcher::m_owner_client_id_lock", this)) { + m_image_ctx.cct->lookup_or_create_singleton_object >( + m_task_finisher, "librbd::task_finisher"); } ImageWatcher::~ImageWatcher() { - delete m_task_finisher; + m_task_finisher = nullptr; { RWLock::RLocker l(m_watch_lock); assert(m_watch_state != WATCH_STATE_REGISTERED); diff --git a/src/librbd/TaskFinisher.h b/src/librbd/TaskFinisher.h index 43ec51796c5..52853b73ffd 100644 --- a/src/librbd/TaskFinisher.h +++ b/src/librbd/TaskFinisher.h @@ -19,10 +19,10 @@ namespace librbd { template class TaskFinisher { public: - TaskFinisher(CephContext &cct) + TaskFinisher(CephContext *cct) : m_cct(cct), m_lock("librbd::TaskFinisher::m_lock"), - m_finisher(new Finisher(&cct)), - m_safe_timer(new SafeTimer(&cct, m_lock, false)) + m_finisher(new Finisher(cct)), + m_safe_timer(new SafeTimer(cct, m_lock, false)) { m_finisher->start(); m_safe_timer->init(); @@ -111,7 +111,7 @@ private: Task m_task; }; - CephContext &m_cct; + CephContext *m_cct; Mutex m_lock; Finisher *m_finisher; -- 2.47.3