Close hack listener before closing channel
This commit is contained in:
		
							parent
							
								
									e28d70f5b2
								
							
						
					
					
						commit
						6307bfcdf4
					
				
					 1 changed files with 14 additions and 10 deletions
				
			
		|  | @ -22,6 +22,7 @@ import ( | |||
| 	"net" | ||||
| 	"os" | ||||
| 	"strconv" | ||||
| 	"sync" | ||||
| 	"time" | ||||
| 	"unsafe" | ||||
| ) | ||||
|  | @ -41,7 +42,7 @@ type NativeTun struct { | |||
| 	nopi                    bool          // the device was pased IFF_NO_PI
 | ||||
| 	netlinkSock             int | ||||
| 	netlinkCancel           *rwcancel.RWCancel | ||||
| 
 | ||||
| 	hackListenerClosed      sync.Mutex | ||||
| 	statusListenersShutdown chan struct{} | ||||
| } | ||||
| 
 | ||||
|  | @ -50,6 +51,7 @@ func (tun *NativeTun) File() *os.File { | |||
| } | ||||
| 
 | ||||
| func (tun *NativeTun) RoutineHackListener() { | ||||
| 	defer tun.hackListenerClosed.Unlock() | ||||
| 	/* This is needed for the detection to work across network namespaces | ||||
| 	 * If you are reading this and know a better method, please get in touch. | ||||
| 	 */ | ||||
|  | @ -91,6 +93,7 @@ func createNetlinkSocket() (int, error) { | |||
| func (tun *NativeTun) RoutineNetlinkListener() { | ||||
| 	defer func() { | ||||
| 		unix.Close(tun.netlinkSock) | ||||
| 		tun.hackListenerClosed.Lock() | ||||
| 		close(tun.events) | ||||
| 	}() | ||||
| 
 | ||||
|  | @ -455,6 +458,7 @@ func CreateTUNFromFile(fd *os.File) (TUNDevice, error) { | |||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	tun.hackListenerClosed.Lock() | ||||
| 	go tun.RoutineNetlinkListener() | ||||
| 	go tun.RoutineHackListener() // cross namespace
 | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue