From 1fb4c7189500b4a880e59c28c163d7080d1614fa Mon Sep 17 00:00:00 2001 From: David Herrmann Date: Sat, 3 Dec 2011 12:22:36 +0100 Subject: [PATCH] Eloop: Pass mask argument to fd callbacks fd-callbacks are pretty useless if we do not pass a mask argument with the current flags. Signed-off-by: David Herrmann --- src/eloop.c | 16 ++++++++-------- src/eloop.h | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/eloop.c b/src/eloop.c index 1b6168c..8e61b54 100644 --- a/src/eloop.c +++ b/src/eloop.c @@ -412,19 +412,19 @@ int kmscon_eloop_new_signal(struct kmscon_eloop *loop, return 0; } -static void signal_cb(struct kmscon_fd *fd, void *data) +static void signal_cb(struct kmscon_fd *fd, int mask, void *data) { struct kmscon_signal *sig = data; struct signalfd_siginfo signal_info; int len; - len = read(fd->fd, &signal_info, sizeof(signal_info)); - if (len != sizeof(signal_info)) { - log_warning("eloop: cannot read signalfd\n"); - return; + if (mask & KMSCON_READABLE) { + len = read(fd->fd, &signal_info, sizeof(signal_info)); + if (len != sizeof(signal_info)) + log_warning("eloop: cannot read signalfd\n"); + else + sig->cb(sig, signal_info.ssi_signo, sig->data); } - - sig->cb(sig, signal_info.ssi_signo, sig->data); } int kmscon_eloop_add_signal(struct kmscon_eloop *loop, @@ -561,7 +561,7 @@ int kmscon_eloop_dispatch(struct kmscon_eloop *loop, int timeout) if (ep[i].events & EPOLLHUP) mask |= KMSCON_HUP; - fd->cb(fd, fd->data); + fd->cb(fd, mask, fd->data); } loop->cur_fds = NULL; diff --git a/src/eloop.h b/src/eloop.h index c10db1c..01ff2b2 100644 --- a/src/eloop.h +++ b/src/eloop.h @@ -42,7 +42,7 @@ struct kmscon_fd; struct kmscon_signal; typedef void (*kmscon_idle_cb) (struct kmscon_idle *idle, void *data); -typedef void (*kmscon_fd_cb) (struct kmscon_fd *fd, void *data); +typedef void (*kmscon_fd_cb) (struct kmscon_fd *fd, int mask, void *data); typedef void (*kmscon_signal_cb) (struct kmscon_signal *sig, int signum, void *data); -- 2.7.4