27static int fpm_event_epoll_init(
int max);
28static int fpm_event_epoll_clean(
void);
29static int fpm_event_epoll_wait(
struct fpm_event_queue_s *queue,
unsigned long int timeout);
30static int fpm_event_epoll_add(
struct fpm_event_s *ev);
31static int fpm_event_epoll_remove(
struct fpm_event_s *ev);
35 .support_edge_trigger = 1,
36 .init = fpm_event_epoll_init,
37 .clean = fpm_event_epoll_clean,
38 .wait = fpm_event_epoll_wait,
39 .add = fpm_event_epoll_add,
40 .remove = fpm_event_epoll_remove,
43static struct epoll_event *epollfds =
NULL;
44static int nepollfds = 0;
45static int epollfd = -1;
63static int fpm_event_epoll_init(
int max)
70 epollfd = epoll_create(
max + 1);
77 epollfds = malloc(
sizeof(
struct epoll_event) *
max);
82 memset(epollfds, 0,
sizeof(
struct epoll_event) *
max);
94static int fpm_event_epoll_clean(
void)
114static int fpm_event_epoll_wait(
struct fpm_event_queue_s *queue,
unsigned long int timeout)
119 memset(epollfds, 0,
sizeof(
struct epoll_event) * nepollfds);
122 ret = epoll_wait(epollfd, epollfds, nepollfds, timeout);
126 if (
errno != EINTR) {
133 for (i = 0; i <
ret; i++) {
136 if (!epollfds[i].
data.ptr) {
156static int fpm_event_epoll_add(
struct fpm_event_s *ev)
158 struct epoll_event e;
161#if SIZEOF_SIZE_T == 4
167 e.data.ptr = (
void *)ev;
170 e.events = e.events | EPOLLET;
174 if (epoll_ctl(epollfd, EPOLL_CTL_ADD, ev->
fd, &e) == -1) {
188static int fpm_event_epoll_remove(
struct fpm_event_s *ev)
190 struct epoll_event e;
195 e.data.ptr = (
void *)ev;
198 e.events = e.events | EPOLLET;
202 if (epoll_ctl(epollfd, EPOLL_CTL_DEL, ev->
fd, &e) == -1) {
struct fpm_event_module_s * fpm_event_epoll_module(void)
memset(ptr, 0, type->size)
struct fpm_globals_s fpm_globals
void fpm_event_fire(struct fpm_event_s *ev)