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>
-int register_event_handler(struct event_handler *handler)
+int register_event_handler(struct event_handler *handler, int op)
{
struct epoll_event ev;
int ret;
{
struct epoll_event ev;
int ret;
if (handler->fd <= 0) {
pr_err("Invalid file descriptor of %d\n", handler->fd);
if (handler->fd <= 0) {
pr_err("Invalid file descriptor of %d\n", handler->fd);
- 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;
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);
- pr_err("Failed to add epoll_fd: %m\n");
+ pr_err("Failed to do epoll_ctl %s: %m\n", str);
#include <error.h>
#include <errno.h>
#include <stdint.h>
#include <error.h>
#include <errno.h>
#include <stdint.h>
-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);
int init_jobcontrol(int max_jobs_requested);
int poll_job_requests(int timeout);