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:
		
							parent
							
								
									2f41780023
								
							
						
					
					
						commit
						ac7f82cb23
					
				
					 1 changed files with 12 additions and 2 deletions
				
			
		|  | @ -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); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue