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);
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);
delete driver;
delete notify_handler;
- if (file_events)
- free(file_events);
}
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;
}
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;
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;
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:
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),