From 8243d1803e4331830548305fb0963f3b42e6edd5 Mon Sep 17 00:00:00 2001 From: Haomai Wang Date: Fri, 19 Feb 2016 13:55:50 +0800 Subject: [PATCH] Event: replace fileevent array to vector Signed-off-by: Haomai Wang --- src/msg/async/Event.cc | 15 +++------------ src/msg/async/Event.h | 12 ++++-------- 2 files changed, 7 insertions(+), 20 deletions(-) diff --git a/src/msg/async/Event.cc b/src/msg/async/Event.cc index fb5ea3e509e45..5b15070c4c76f 100644 --- a/src/msg/async/Event.cc +++ b/src/msg/async/Event.cc @@ -106,9 +106,7 @@ int EventCenter::init(int n) return r; } - file_events = static_cast(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(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; } diff --git a/src/msg/async/Event.h b/src/msg/async/Event.h index 14979e6b344d7..126a36c3120be 100644 --- a/src/msg/async/Event.h +++ b/src/msg/async/Event.h @@ -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 external_events; - FileEvent *file_events; + vector file_events; EventDriver *driver; map > 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), -- 2.47.3