]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
msg/async: make EventCenter notify file event creating when set_owner
authorHaomai Wang <haomai@xsky.com>
Wed, 29 Jun 2016 08:54:16 +0000 (16:54 +0800)
committerHaomai Wang <haomai@xsky.com>
Tue, 12 Jul 2016 15:48:32 +0000 (23:48 +0800)
EventCenter::init is called by other thread instead of event thread, so we
need to move create_file_event to set_owner which is called by event thread.

Signed-off-by: Haomai Wang <haomai@xsky.com>
src/msg/async/Event.cc

index 066ae5fda838defcb80cb087f9363f9ee213458e..3dbd5726bfa67944c17d6ef7ff5b6ce18f600b96 100644 (file)
@@ -106,10 +106,6 @@ int EventCenter::init(int n, unsigned i)
 
   file_events.resize(n);
   nevent = n;
-  notify_handler = new C_handle_notify(this, cct),
-  r = create_file_event(notify_receive_fd, EVENT_READABLE, notify_handler);
-  if (r < 0)
-    return r;
   return 0;
 }
 
@@ -132,7 +128,8 @@ EventCenter::~EventCenter()
     ::close(notify_send_fd);
 
   delete driver;
-  delete notify_handler;
+  if (notify_handler)
+    delete notify_handler;
 }
 
 
@@ -144,6 +141,10 @@ void EventCenter::set_owner()
   global_centers->centers[idx] = this;
   owner = pthread_self();
   ldout(cct, 1) << __func__ << " idx=" << idx << " owner=" << owner << dendl;
+
+  notify_handler = new C_handle_notify(this, cct);
+  int r = create_file_event(notify_receive_fd, EVENT_READABLE, notify_handler);
+  assert(r == 0);
 }
 
 int EventCenter::create_file_event(int fd, int mask, EventCallbackRef ctxt)