]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
Event: replace fileevent array to vector
authorHaomai Wang <haomai@xsky.com>
Fri, 19 Feb 2016 05:55:50 +0000 (13:55 +0800)
committerHaomai Wang <haomai@xsky.com>
Fri, 19 Feb 2016 06:16:26 +0000 (14:16 +0800)
Signed-off-by: Haomai Wang <haomai@xsky.com>
src/msg/async/Event.cc
src/msg/async/Event.h

index fb5ea3e509e45f84a4c8f7c786dcf3414ac0f558..5b15070c4c76f29436713178aa1fae4f6323526c 100644 (file)
@@ -106,9 +106,7 @@ int EventCenter::init(int n)
     return r;
   }
 
-  file_events = static_cast<FileEvent *>(malloc(sizeof(FileEvent)*n));
-  memset(file_events, 0, sizeof(FileEvent)*n);
-
+  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);
@@ -119,6 +117,7 @@ int EventCenter::init(int n)
 
 EventCenter::~EventCenter()
 {
+  assert(external_events.empty() && time_events.empty());
   if (notify_receive_fd >= 0) {
     delete_file_event(notify_receive_fd, EVENT_READABLE);
     ::close(notify_receive_fd);
@@ -128,8 +127,6 @@ EventCenter::~EventCenter()
 
   delete driver;
   delete notify_handler;
-  if (file_events)
-    free(file_events);
 }
 
 
@@ -152,13 +149,7 @@ int EventCenter::create_file_event(int fd, int mask, EventCallbackRef ctxt)
       lderr(cct) << __func__ << " event count is exceed." << dendl;
       return -ERANGE;
     }
-    FileEvent *new_events = static_cast<FileEvent *>(realloc(file_events, sizeof(FileEvent)*new_size));
-    if (!new_events) {
-      lderr(cct) << __func__ << " failed to realloc file_events" << cpp_strerror(errno) << dendl;
-      return -errno;
-    }
-    file_events = new_events;
-    memset(file_events+nevent, 0, sizeof(FileEvent)*(new_size-nevent));
+    file_events.resize(new_size);
     nevent = new_size;
   }
 
index 14979e6b344d7db48b188202ec28b763beeb498a..126a36c3120bec2f0ef863623954cbc4148dc020 100644 (file)
@@ -89,14 +89,14 @@ class EventCenter {
     int mask;
     EventCallbackRef read_cb;
     EventCallbackRef write_cb;
-    FileEvent(): mask(0) {}
+    FileEvent(): mask(0), read_cb(NULL), write_cb(NULL) {}
   };
 
   struct TimeEvent {
     uint64_t id;
     EventCallbackRef time_cb;
 
-    TimeEvent(): id(0) {}
+    TimeEvent(): id(0), time_cb(NULL) {}
   };
 
   CephContext *cct;
@@ -105,7 +105,7 @@ class EventCenter {
   Mutex external_lock, file_lock, time_lock;
   atomic_t external_num_events;
   deque<EventCallbackRef> external_events;
-  FileEvent *file_events;
+  vector<FileEvent> file_events;
   EventDriver *driver;
   map<utime_t, list<TimeEvent> > time_events;
   uint64_t time_event_next_id;
@@ -120,10 +120,7 @@ class EventCenter {
   int process_time_events();
   FileEvent *_get_file_event(int fd) {
     assert(fd < nevent);
-    FileEvent *p = &file_events[fd];
-    if (!p->mask)
-      new(p) FileEvent();
-    return p;
+    return &file_events[fd];
   }
 
  public:
@@ -135,7 +132,6 @@ class EventCenter {
     file_lock("AsyncMessenger::file_lock"),
     time_lock("AsyncMessenger::time_lock"),
     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),
     notify_handler(NULL),