diff options
Diffstat (limited to 'selfwake_eventfd.h')
-rw-r--r-- | selfwake_eventfd.h | 54 |
1 files changed, 0 insertions, 54 deletions
diff --git a/selfwake_eventfd.h b/selfwake_eventfd.h deleted file mode 100644 index 836d037..0000000 --- a/selfwake_eventfd.h +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (C) 2012-2013, Eric Wong <normalperson@yhbt.net> - * License: GPLv3 or later (see COPYING for details) - */ -#if defined(HAVE_SYS_EVENTFD_H) && defined(HAVE_EVENTFD) -#include <sys/eventfd.h> -#if defined(EFD_CLOEXEC) && defined(EFD_NONBLOCK) -#include <sys/poll.h> - -static ssize_t selfwake_write(struct mog_fd *mfd) -{ - static const uint64_t buf = 1; - - return write(mfd->fd, &buf, sizeof(buf)); -} - -struct mog_fd * mog_selfwake_new(void) -{ - struct mog_fd *mfd; - int efd = eventfd(0, EFD_CLOEXEC | EFD_NONBLOCK); - - if (efd < 0) - die_errno("failed to create eventfd"); - - mfd = mog_fd_init(efd, MOG_FD_TYPE_SELFWAKE); - mfd->as.selfwake.writer = mfd; - - return mfd; -} - -static ssize_t selfwake_drain(struct mog_fd *mfd) -{ - uint64_t buf; - - return read(mfd->fd, &buf, sizeof(buf)); -} - -/* this allows interrupts */ -void mog_selfwake_wait(struct mog_fd *mfd) -{ - sigset_t set; - struct pollfd pfd = { .fd = mfd->fd, .events = POLLIN }; - int r; - - CHECK(int, 0, sigemptyset(&set)); - - r = ppoll(&pfd, 1, NULL, &set); - if ((r < 0) && (errno != ENOMEM)) - assert(errno == EINTR && "BUG in using ppoll"); - - mog_selfwake_drain(mfd); -} -#endif /* EFD_CLOEXEC+EFD_NONBLOCK */ -#endif /* HAVE_SYS_EVENTFD_H */ |