diff options
author | Guangxiong Lin <[email protected]> | 2022-12-02 12:18:57 +0800 |
---|---|---|
committer | Guangxiong Lin <[email protected]> | 2022-12-02 12:18:57 +0800 |
commit | 0457119acb36b89b6f2f4534fe8ad94b19540bbd (patch) | |
tree | 865660e935da9a4adc34f17237e7e83364b53fc6 /eventloop.c | |
parent | 6ec515e5515fbf529e3610a2c88116278af2a134 (diff) | |
download | tinyserver-0457119acb36b89b6f2f4534fe8ad94b19540bbd.tar.gz tinyserver-0457119acb36b89b6f2f4534fe8ad94b19540bbd.tar.bz2 tinyserver-0457119acb36b89b6f2f4534fe8ad94b19540bbd.zip |
Refactor
Diffstat (limited to 'eventloop.c')
-rw-r--r-- | eventloop.c | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/eventloop.c b/eventloop.c index 970a521..ae4377c 100644 --- a/eventloop.c +++ b/eventloop.c @@ -3,6 +3,7 @@ #include "eventloop.h" #include "util.h" +#include "constant.h" struct eventLoop *eventLoopNew() { @@ -33,8 +34,6 @@ int eventLoopAdd(struct eventLoop *el, struct event *ev, int flag) epev.events = flag; epev.data.ptr = ev; - ev->el = el; - return epoll_ctl(el->epollfd, EPOLL_CTL_ADD, ev->fd, &epev); } @@ -55,7 +54,8 @@ void eventLoopLoop(struct eventLoop *el) for (int i = 0; i < nevents; i++) { ev = eventLoopGet(el, i); - ev->handle(ev); + if (ev->handle(ev->data) == -1) + eventLoopDel(el, ev); } } } @@ -66,9 +66,19 @@ int eventLoopDel(struct eventLoop *el, struct event *ev) return ERROR; if (ev->delete) - ev->delete(ev); - else - free(ev); + ev->delete(ev->data); + free(ev); return OK; } + +struct event *eventNew(void *data, int fd, void (*handle), void (*delete)) +{ + struct event *ev = malloc(sizeof(*ev)); + ev->data = data; + ev->handle = handle; + ev->fd = fd; + ev->delete = delete; + + return ev; +} |