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 <dh.herrmann@googlemail.com>
This commit is contained in:
David Herrmann 2011-12-03 12:22:36 +01:00
parent 42a6c76e28
commit 1fb4c71895
2 changed files with 9 additions and 9 deletions

View File

@ -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;

View File

@ -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);