]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
librbd: use task finisher per CephContext 7400/head
authorHaomai Wang <haomai@xsky.com>
Thu, 28 Jan 2016 09:13:00 +0000 (17:13 +0800)
committerHaomai Wang <haomai@xsky.com>
Fri, 29 Jan 2016 03:36:46 +0000 (11:36 +0800)
Signed-off-by: Haomai Wang <haomai@xsky.com>
src/librbd/ImageWatcher.cc
src/librbd/TaskFinisher.h

index b97d502d04c2d2c8ee51755571741030bd9823bf..2c5331ccf168b28629d54c63301e6e1c3dbcd0b0 100644 (file)
@@ -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<Task>(*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<TaskFinisher<Task> >(
+    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);
index 43ec51796c5e83598725863c35f6e400aefbeef5..52853b73ffd9a296a8cfd12bd483f504543b5703 100644 (file)
@@ -19,10 +19,10 @@ namespace librbd {
 template <typename Task>
 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;