X-Git-Url: https://www.tinc-vpn.org/git/browse?p=tinc;a=blobdiff_plain;f=src%2Fmingw%2Fdevice.c;fp=src%2Fmingw%2Fdevice.c;h=428a990e2004d766f549b564dcd6723c988fc25d;hp=9744196a3cd93c65d2138b34deada4d540af6861;hb=ac7f82cb235008d1711781a87ffdce5d45465134;hpb=2f41780023bffc81fa42b0e72f67be86a52b370c diff --git a/src/mingw/device.c b/src/mingw/device.c index 9744196a..428a990e 100644 --- a/src/mingw/device.c +++ b/src/mingw/device.c @@ -47,6 +47,7 @@ static DWORD WINAPI tapreader(void *bla) { DWORD len; OVERLAPPED overlapped; vpn_packet_t packet; + int errors; logger(DEBUG_ALWAYS, LOG_DEBUG, "Tap reader running"); @@ -69,13 +70,22 @@ static DWORD WINAPI tapreader(void *bla) { } else { logger(DEBUG_ALWAYS, LOG_ERR, "Error while reading from %s %s: %s", device_info, device, strerror(errno)); - return -1; + errors++; + if(errors >= 10) { + EnterCriticalSection(&mutex); + running = false; + LeaveCriticalSection(&mutex); + } + usleep(1000000); + continue; } } - EnterCriticalSection(&mutex); + errors = 0; packet.len = len; packet.priority = 0; + + EnterCriticalSection(&mutex); route(myself, &packet); event_flush_output(); LeaveCriticalSection(&mutex);