X-Git-Url: http://git.archive.openwrt.org/?p=project%2Flibubox.git;a=blobdiff_plain;f=uloop-epoll.c;h=609ca6e77990ea1e2dbef7c38d3a2440fb06484b;hp=9581e124040c91514f5cee0ec1a5d7800cfd1edd;hb=ace64897d47b9bc7af277d8a3f8a0ff67976cba8;hpb=6a75b3b6437d3c98d852c1bca131c8f81646f2f5 diff --git a/uloop-epoll.c b/uloop-epoll.c index 9581e12..609ca6e 100644 --- a/uloop-epoll.c +++ b/uloop-epoll.c @@ -16,8 +16,6 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#include - /** * FIXME: uClibc < 0.9.30.3 does not define EPOLLRDHUP for Linux >= 2.6.17 */ @@ -25,63 +23,8 @@ #define EPOLLRDHUP 0x2000 #endif -static void -uloop_signal_fd_cb(struct uloop_fd *fd, unsigned int events) +static int uloop_init_pollfd(void) { - struct signalfd_siginfo fdsi; - int ret; - -retry: - ret = read(fd->fd, &fdsi, sizeof(fdsi)); - if (ret < 0 && errno == EINTR) - goto retry; - - if (ret != sizeof(fdsi)) - return; - - uloop_handle_signal(fdsi.ssi_signo); -} - -static bool -uloop_setup_signalfd(bool add) -{ - static struct uloop_fd sfd = { - .cb = uloop_signal_fd_cb - }; - static sigset_t prev_mask; - sigset_t mask; - - if (signal_fd < 0) - return false; - - sigemptyset(&mask); - - if (!add) { - uloop_fd_delete(&sfd); - sigprocmask(SIG_BLOCK, &prev_mask, NULL); - } else { - sigaddset(&mask, SIGQUIT); - sigaddset(&mask, SIGINT); - sigaddset(&mask, SIGTERM); - sigaddset(&mask, SIGCHLD); - sigprocmask(SIG_BLOCK, &mask, &prev_mask); - - sfd.fd = signal_fd; - uloop_fd_add(&sfd, ULOOP_READ | ULOOP_EDGE_TRIGGER); - } - - if (signalfd(signal_fd, &mask, SFD_NONBLOCK | SFD_CLOEXEC) < 0) { - sigprocmask(SIG_BLOCK, &prev_mask, NULL); - return false; - } - - return true; -} - -int uloop_init(void) -{ - sigset_t mask; - if (poll_fd >= 0) return 0; @@ -90,10 +33,6 @@ int uloop_init(void) return -1; fcntl(poll_fd, F_SETFD, fcntl(poll_fd, F_GETFD) | FD_CLOEXEC); - - sigemptyset(&mask); - signal_fd = signalfd(-1, &mask, SFD_NONBLOCK | SFD_CLOEXEC); - return 0; } @@ -113,7 +52,6 @@ static int register_poll(struct uloop_fd *fd, unsigned int flags) if (flags & ULOOP_EDGE_TRIGGER) ev.events |= EPOLLET; - ev.data.fd = fd->fd; ev.data.ptr = fd; fd->flags = flags;