Convert sizeof foo to sizeof(foo).
[tinc] / src / event.c
index 59b96e3..d981f75 100644 (file)
@@ -258,8 +258,8 @@ bool event_loop(void) {
        while(running) {
                struct timeval diff;
                struct timeval *tv = get_time_remaining(&diff);
-               memcpy(&readable, &readfds, sizeof readable);
-               memcpy(&writable, &writefds, sizeof writable);
+               memcpy(&readable, &readfds, sizeof(readable));
+               memcpy(&writable, &writefds, sizeof(writable));
 
                int fds = 0;
 
@@ -357,10 +357,13 @@ bool event_loop(void) {
                        WSANETWORKEVENTS network_events;
                        if (WSAEnumNetworkEvents(io->fd, io->event, &network_events) != 0)
                                return false;
-                       if (network_events.lNetworkEvents & WRITE_EVENTS)
-                               io->cb(io->data, IO_WRITE);
                        if (network_events.lNetworkEvents & READ_EVENTS)
                                io->cb(io->data, IO_READ);
+                       /*
+                           The fd might be available for write too. However, if we already fired the read callback, that
+                           callback might have deleted the io (e.g. through terminate_connection()), so we can't fire the
+                           write callback here. Instead, we loop back and let the writable io loop above handle it.
+                        */
                }
        }
 #endif