From 782898ed3aabd9611386db6e72370d2cf7941a02 Mon Sep 17 00:00:00 2001 From: Timo Kokkonen Date: Sun, 11 Oct 2020 11:55:42 +0300 Subject: [PATCH] register_event_handler: Make also modifications and deletes possible Take the op parameter as an argument that is given to epoll_ctl(). This way the function can also modify and delete epoll events. Signed-off-by: Timo Kokkonen --- process.c | 27 +++++++++++++++++++++++---- process.h | 3 ++- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/process.c b/process.c index 96c93f8..8a4059b 100644 --- a/process.c +++ b/process.c @@ -574,10 +574,11 @@ print: return 0; } -int register_event_handler(struct event_handler *handler) +int register_event_handler(struct event_handler *handler, int op) { struct epoll_event ev; int ret; + const char *str; if (handler->fd <= 0) { pr_err("Invalid file descriptor of %d\n", handler->fd); @@ -589,15 +590,33 @@ int register_event_handler(struct event_handler *handler) return -1; } - pr_info("Registering handler for %s, fd %d\n", + switch (op) { + case EPOLL_CTL_ADD: + str = "register"; + break; + + case EPOLL_CTL_MOD: + str = "modify"; + break; + + case EPOLL_CTL_DEL: + str = "deregister"; + break; + + default: + pr_err("Invalid op %d\n", op); + return -1; + } + + pr_info("Doing a epoll %s for handler %s, fd %d\n", str, handler->name, handler->fd); ev.data.fd = handler->fd; ev.data.ptr = handler; ev.events = handler->events; - ret = epoll_ctl(epoll_fd, EPOLL_CTL_ADD, handler->fd, &ev); + ret = epoll_ctl(epoll_fd, op, handler->fd, &ev); if (ret) { - pr_err("Failed to add epoll_fd: %m\n"); + pr_err("Failed to do epoll_ctl %s: %m\n", str); return -1; } diff --git a/process.h b/process.h index 0971a71..1b92e5b 100644 --- a/process.h +++ b/process.h @@ -9,6 +9,7 @@ #include #include #include +#include struct event_handler; @@ -22,7 +23,7 @@ struct event_handler { char *name; }; -int register_event_handler(struct event_handler *handler); +int register_event_handler(struct event_handler *handler, int op); int init_jobcontrol(int max_jobs_requested); int poll_job_requests(int timeout); -- 2.45.0