From: Haomai Wang Date: Thu, 28 Jan 2016 09:13:00 +0000 (+0800) Subject: librbd: use task finisher per CephContext X-Git-Tag: v10.0.4~93^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=96563c15159d1ba0e0978e76b8df6a8ab311e5d2;p=ceph.git librbd: use task finisher per CephContext Signed-off-by: Haomai Wang --- diff --git a/src/librbd/ImageWatcher.cc b/src/librbd/ImageWatcher.cc index b97d502d04c2d..2c5331ccf168b 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 43ec51796c5e8..52853b73ffd9a 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;