]> git.itanic.dy.fi Git - rrdd/commitdiff
register_event_handler: Make also modifications and deletes possible
authorTimo Kokkonen <timo.t.kokkonen@iki.fi>
Sun, 11 Oct 2020 08:55:42 +0000 (11:55 +0300)
committerTimo Kokkonen <timo.t.kokkonen@iki.fi>
Sun, 11 Oct 2020 08:55:42 +0000 (11:55 +0300)
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 <timo.t.kokkonen@iki.fi>
process.c
process.h

index 96c93f822366eba06e18fbaf20c18181224de0e9..8a4059bb34d44fc0f220902474d2ca92c77c616f 100644 (file)
--- 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;
        }
 
index 0971a7126840fddc2b3c3a593e19645a7c8efcb3..1b92e5ba621076168b2be20cf413474ce0e40c25 100644 (file)
--- a/process.h
+++ b/process.h
@@ -9,6 +9,7 @@
 #include <error.h>
 #include <errno.h>
 #include <stdint.h>
+#include <sys/epoll.h>
 
 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);