This lets us collect FDs even if the GC doesn't do it for us.
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
var reqPeer map[uint32]peerEndpointPtr
var reqPeerLock sync.Mutex
+ defer netlinkCancel.Close()
defer unix.Close(netlinkSock)
for msg := make([]byte, 1<<16); ; {
go func(l *UAPIListener) {
var buff [0]byte
for {
+ defer uapi.inotifyRWCancel.Close()
// start with lstat to avoid race condition
if _, err := os.Lstat(socketPath); os.IsNotExist(err) {
l.connErr <- err
_, err = rw.closingWriter.Write([]byte{0})
return
}
+
+func (rw *RWCancel) Close() {
+ rw.closingReader.Close()
+ rw.closingWriter.Close()
+}
unix.Close(tun.netlinkSock)
tun.hackListenerClosed.Lock()
close(tun.events)
+ tun.netlinkCancel.Close()
}()
for msg := make([]byte, 1<<16); ; {