Flush output buffers in the tap reader thread on Windows.
This is basically a port of commit 50fcfea1
to 1.1.
This commit is contained in:
parent
4d05e695ab
commit
f9ab8e266b
4 changed files with 11 additions and 0 deletions
|
@ -245,6 +245,12 @@ bool event_loop(void) {
|
||||||
return true;
|
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) {
|
void event_exit(void) {
|
||||||
running = false;
|
running = false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 void signal_del(signal_t *sig);
|
||||||
|
|
||||||
extern bool event_loop(void);
|
extern bool event_loop(void);
|
||||||
|
extern void event_flush_output(void);
|
||||||
extern void event_exit(void);
|
extern void event_exit(void);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -80,6 +80,7 @@ static DWORD WINAPI tapreader(void *bla) {
|
||||||
packet.len = len;
|
packet.len = len;
|
||||||
packet.priority = 0;
|
packet.priority = 0;
|
||||||
route(myself, &packet);
|
route(myself, &packet);
|
||||||
|
event_flush_output();
|
||||||
LeaveCriticalSection(&mutex);
|
LeaveCriticalSection(&mutex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -349,6 +349,9 @@ static void do_outgoing_pipe(connection_t *c, char *command) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void handle_meta_write(connection_t *c) {
|
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);
|
ssize_t outlen = send(c->socket, c->outbuf.data + c->outbuf.offset, c->outbuf.len - c->outbuf.offset, 0);
|
||||||
if(outlen <= 0) {
|
if(outlen <= 0) {
|
||||||
if(!errno || errno == EPIPE) {
|
if(!errno || errno == EPIPE) {
|
||||||
|
|
Loading…
Reference in a new issue