]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
Event: delete leak event callback
authorHaomai Wang <haomai@xsky.com>
Fri, 19 Feb 2016 05:48:35 +0000 (13:48 +0800)
committerHaomai Wang <haomai@xsky.com>
Fri, 19 Feb 2016 06:15:36 +0000 (14:15 +0800)
Signed-off-by: Haomai Wang <haomai@xsky.com>
src/msg/async/Event.cc
src/msg/async/Event.h

index 00abef4fa0228a0fe22ad6cd5cc692f90f18e110..fb5ea3e509e45f84a4c8f7c786dcf3414ac0f558 100644 (file)
@@ -92,25 +92,28 @@ int EventCenter::init(int n)
   int fds[2];
   if (pipe(fds) < 0) {
     lderr(cct) << __func__ << " can't create notify pipe" << dendl;
-    return -1;
+    return -errno;
   }
 
   notify_receive_fd = fds[0];
   notify_send_fd = fds[1];
   r = net.set_nonblock(notify_receive_fd);
   if (r < 0) {
-    return -1;
+    return r;
   }
   r = net.set_nonblock(notify_send_fd);
   if (r < 0) {
-    return -1;
+    return r;
   }
 
   file_events = static_cast<FileEvent *>(malloc(sizeof(FileEvent)*n));
   memset(file_events, 0, sizeof(FileEvent)*n);
 
   nevent = n;
-  create_file_event(notify_receive_fd, EVENT_READABLE, EventCallbackRef(new C_handle_notify(this, cct)));
+  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;
 }
 
@@ -122,8 +125,9 @@ EventCenter::~EventCenter()
   }
   if (notify_send_fd >= 0)
     ::close(notify_send_fd);
-    
+
   delete driver;
+  delete notify_handler;
   if (file_events)
     free(file_events);
 }
index 526f8b3d5e46b189cc3f61149f4e57587d0c57be..14979e6b344d7db48b188202ec28b763beeb498a 100644 (file)
@@ -115,6 +115,7 @@ class EventCenter {
   int notify_send_fd;
   NetHandler net;
   pthread_t owner;
+  EventCallbackRef notify_handler;
 
   int process_time_events();
   FileEvent *_get_file_event(int fd) {
@@ -136,7 +137,9 @@ class EventCenter {
     external_num_events(0),
     file_events(NULL),
     driver(NULL), time_event_next_id(1),
-    notify_receive_fd(-1), notify_send_fd(-1), net(c), owner(0), already_wakeup(0) {
+    notify_receive_fd(-1), notify_send_fd(-1), net(c), owner(0),
+    notify_handler(NULL),
+    already_wakeup(0) {
     last_time = time(NULL);
   }
   ~EventCenter();