Fix for the event loop on Windows.
authorGuus Sliepen <guus@tinc-vpn.org>
Sun, 27 Jun 2021 14:06:58 +0000 (16:06 +0200)
committerGuus Sliepen <guus@tinc-vpn.org>
Sun, 27 Jun 2021 14:09:46 +0000 (16:09 +0200)
The code did not take into account that the return value of
WSAWaitForMultipleEvents() is the offset into the event array plus
WSA_WAIT_EVENT_0.

Based on a patch from arsh0r.

src/event.c

index 1283edd..1ca15d2 100644 (file)
@@ -435,12 +435,12 @@ bool event_loop(void) {
                                break;
                        }
 
-                       if(result >= event_count - event_offset) {
-                               return(false);
+                       if(result < WSA_WAIT_EVENT_0 || result >= WSA_WAIT_EVENT_0 + event_count - event_offset) {
+                               return false;
                        }
 
                        /* Look up io in the map by index. */
-                       event_index = result - event_offset;
+                       event_index = result - WSA_WAIT_EVENT_0 + event_offset;
                        io_t *io = io_map[event_index];
 
                        if(io->fd == -1) {