]> git.itanic.dy.fi Git - rrdd/blobdiff - process.c
register_event_handler: Make also modifications and deletes possible
[rrdd] / process.c
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;
        }