Flush output buffers in the tap reader thread on Windows.
authorGuus Sliepen <guus@tinc-vpn.org>
Fri, 1 Mar 2013 16:15:26 +0000 (17:15 +0100)
committerGuus Sliepen <guus@tinc-vpn.org>
Fri, 1 Mar 2013 16:37:56 +0000 (17:37 +0100)
This is basically a port of commit 50fcfea1 to 1.1.

src/event.c
src/event.h
src/mingw/device.c
src/net_socket.c

index 6b730f6d153de426eb1f919638c590c626f3328c..095e7c33df25d369c8a7d241b970c0286554ac6a 100644 (file)
@@ -245,6 +245,12 @@ bool event_loop(void) {
        return true;
 }
 
+void event_flush_output(void) {
+       for splay_each(io_t, io, &io_tree)
+               if(FD_ISSET(io->fd, &writefds))
+                       io->cb(io->data, IO_WRITE);
+}
+
 void event_exit(void) {
        running = false;
 }
index d0129d0ce8ee54f7b613100379d24e4c94ea6854..bd91b7b9ac1c616f9f587581b2da6a9bf7a22f3e 100644 (file)
@@ -65,6 +65,7 @@ extern void signal_add(signal_t *sig, signal_cb_t cb, void *data, int signum);
 extern void signal_del(signal_t *sig);
 
 extern bool event_loop(void);
+extern void event_flush_output(void);
 extern void event_exit(void);
 
 #endif
index aa05972046d544e098914c234d76b83786cf067c..ac83d8c36e8344f92479a269814ebe57fdcd1c82 100644 (file)
@@ -80,6 +80,7 @@ static DWORD WINAPI tapreader(void *bla) {
                packet.len = len;
                packet.priority = 0;
                route(myself, &packet);
+               event_flush_output();
                LeaveCriticalSection(&mutex);
        }
 }
index a28be54a62e2511679a578f7186056c265b86220..0ee365538be3c8248b721d8a70c934b0d85b7b6d 100644 (file)
@@ -349,6 +349,9 @@ static void do_outgoing_pipe(connection_t *c, char *command) {
 }
 
 static void handle_meta_write(connection_t *c) {
+       if(c->outbuf.len <= c->outbuf.offset)
+               return;
+
        ssize_t outlen = send(c->socket, c->outbuf.data + c->outbuf.offset, c->outbuf.len - c->outbuf.offset, 0);
        if(outlen <= 0) {
                if(!errno || errno == EPIPE) {