Handle errors from TAP-Win32/64 adapter in a better way.

Before, the tapreader thread would just exit immediately after encountering the
first error, without notifying the main thread. Now, the tapreader thead never
exits itself, but tells the main thread to stop when more than ten errors are
encountered in a row.
This commit is contained in:
Guus Sliepen 2014-02-07 16:34:08 +01:00
parent 2f41780023
commit ac7f82cb23

View file

@ -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);