X-Git-Url: https://tinc-vpn.org/git/browse?a=blobdiff_plain;f=src%2Fevent.c;h=5d0bcef0b265c6067157e2674b18a07f8d647e70;hb=b13e1a3c1f7252cda5ab95166d9f2d578983471f;hp=c547c46d1f2f5d5a5077d83c335d823c634bb601;hpb=b322126576c52ffbc9a91d818125fc461fa17d1b;p=tinc diff --git a/src/event.c b/src/event.c index c547c46d..5d0bcef0 100644 --- a/src/event.c +++ b/src/event.c @@ -1,6 +1,6 @@ /* event.c -- I/O, timeout and signal event handling - Copyright (C) 2012-2021 Guus Sliepen + Copyright (C) 2012-2022 Guus Sliepen This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -18,7 +18,8 @@ */ #include "system.h" -#include "dropin.h" + +#include #ifdef HAVE_SYS_EPOLL_H #include @@ -46,7 +47,7 @@ static DWORD event_count = 0; static bool running; #ifdef HAVE_SYS_EPOLL_H -static inline int event_epoll_init() { +static inline int event_epoll_init(void) { /* NOTE: 1024 limit is only used on ancient (pre 2.6.27) kernels. Decent kernels will ignore this value making it unlimited. epoll_create1 might be better, but these kernels would not be supported @@ -290,11 +291,14 @@ void timeout_del(timeout_t *timeout) { static io_t signalio; static int pipefd[2] = {-1, -1}; -static signal_t *signal_handle[NSIG + 1] = {}; +static signal_t *signal_handle[NSIG + 1] = {NULL}; static void signal_handler(int signum) { unsigned char num = signum; - write(pipefd[1], &num, 1); + + if(write(pipefd[1], &num, 1) != 1) { + // Pipe full or broken, nothing we can do about it. + } } static void signalio_handler(void *data, int flags) { @@ -480,6 +484,7 @@ bool event_loop(void) { } #else + assert(WSA_WAIT_EVENT_0 == 0); while(running) { struct timeval diff; @@ -541,12 +546,12 @@ bool event_loop(void) { break; } - if(result < WSA_WAIT_EVENT_0 || result >= WSA_WAIT_EVENT_0 + event_count - event_offset) { + if(result >= event_count - event_offset) { return false; } /* Look up io in the map by index. */ - event_index = result - WSA_WAIT_EVENT_0 + event_offset; + event_index = result + event_offset; io_t *io = io_map[event_index]; if(io->fd == -1) {