From: Haomai Wang Date: Wed, 29 Jun 2016 08:54:16 +0000 (+0800) Subject: msg/async: make EventCenter notify file event creating when set_owner X-Git-Tag: ses5-milestone5~429^2~14 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=f5d1c05b8fe16e45462ef4ec69739466a976b7ac;p=ceph.git msg/async: make EventCenter notify file event creating when set_owner 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 --- diff --git a/src/msg/async/Event.cc b/src/msg/async/Event.cc index 066ae5fda838..3dbd5726bfa6 100644 --- a/src/msg/async/Event.cc +++ b/src/msg/async/Event.cc @@ -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)