diff options
Diffstat (limited to 'selfwake_pipe.h')
-rw-r--r-- | selfwake_pipe.h | 49 |
1 files changed, 0 insertions, 49 deletions
diff --git a/selfwake_pipe.h b/selfwake_pipe.h deleted file mode 100644 index f61d755..0000000 --- a/selfwake_pipe.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (C) 2012-2013, Eric Wong <normalperson@yhbt.net> - * License: GPLv3 or later (see COPYING for details) - */ -#ifndef HAVE_EVENTFD -static ssize_t selfwake_write(struct mog_fd *mfd) -{ - return write(mfd->as.selfwake.writer->fd, "", 1); -} - -struct mog_fd * mog_selfwake_new(void) -{ - struct mog_fd *reader, *writer; - struct mog_selfwake *selfwake; - int self_pipe[2]; - - if (pipe2(self_pipe, O_NONBLOCK | O_CLOEXEC) < 0) - die_errno("failed to init self-pipe"); - - reader = mog_fd_init(self_pipe[0], MOG_FD_TYPE_SELFWAKE); - selfwake = &reader->as.selfwake; - - writer = mog_fd_init(self_pipe[1], MOG_FD_TYPE_SELFPIPE); - writer->as.selfpipe.reader = reader; - selfwake->writer = writer; - - return reader; -} - -static ssize_t selfwake_drain(struct mog_fd *mfd) -{ - char buf[64]; - return read(mfd->fd, buf, sizeof(buf)); -} - -/* this allows interrupts */ -void mog_selfwake_wait(struct mog_fd *mfd) -{ - ssize_t r; - - /* poll() on a pipe does not work on some *BSDs, so just block */ - mog_set_nonblocking(mfd->fd, false); - mog_intr_enable(); - r = selfwake_drain(mfd); - mog_intr_disable(); - mog_set_nonblocking(mfd->fd, true); - mog_selfwake_drain(mfd); -} -#endif /* !HAVE_EVENTFD */ |