X-Git-Url: https://tinc-vpn.org/git/browse?p=tinc;a=blobdiff_plain;f=src%2Fmingw%2Fdevice.c;h=235e0fd6d64ae0692cce26dbb3c16f7fe2c997a7;hp=56203d44939b789efb4c3b5f1f4b2a0d9faac4ff;hb=3f937afd75c758d7396a3f516ae77231a6f5b3d2;hpb=68f4ca711593416d0defd81199b176ba604c6cb1 diff --git a/src/mingw/device.c b/src/mingw/device.c index 56203d44..235e0fd6 100644 --- a/src/mingw/device.c +++ b/src/mingw/device.c @@ -1,7 +1,7 @@ /* device.c -- Interaction with Windows tap driver in a MinGW environment Copyright (C) 2002-2005 Ivo Timmermans, - 2002-2013 Guus Sliepen + 2002-2014 Guus Sliepen This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -49,6 +49,7 @@ static DWORD WINAPI tapreader(void *bla) { DWORD len; OVERLAPPED overlapped; vpn_packet_t packet; + int errors = 0; logger(LOG_DEBUG, "Tap reader running"); @@ -71,16 +72,27 @@ static DWORD WINAPI tapreader(void *bla) { } else { logger(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); LeaveCriticalSection(&mutex); } + + return 0; } static bool setup_device(void) {