]> git.ipfire.org Git - thirdparty/wireguard-go.git/commitdiff
Close events channel when no status listener
authorJason A. Donenfeld <Jason@zx2c4.com>
Mon, 21 May 2018 12:16:46 +0000 (14:16 +0200)
committerJason A. Donenfeld <Jason@zx2c4.com>
Mon, 21 May 2018 12:16:46 +0000 (14:16 +0200)
tun_darwin.go
tun_linux.go

index d2cdcd5c3d4afbbffeb06305e97be53f5abad418..b8afdfd6e64f073b9f6d2afbc4b02499dc4b9d85 100644 (file)
@@ -303,6 +303,9 @@ func (tun *NativeTun) Close() error {
                // Surprisingly, on Darwin, simply closing a route socket is enough to unblock it.
                // We don't even need to call shutdown, or use a rwcancel.
                err3 = unix.Close(tun.routeSocket)
+               tun.routeSocket = -1
+       } else if tun.events != nil {
+               close(tun.events)
        }
        if err1 != nil {
                return err1
index f5b24dc7b2c94bc2b6808d39d2e883f1a23efe99..629a5eca8bccc639fb607f6bc85d57298081335e 100644 (file)
@@ -357,9 +357,13 @@ func (tun *NativeTun) Events() chan TUNEvent {
 
 func (tun *NativeTun) Close() error {
        var err1 error
-       close(tun.statusListenersShutdown)
-       if tun.netlinkCancel != nil {
-               err1 = tun.netlinkCancel.Cancel()
+       if tun.statusListenersShutdown != nil {
+               close(tun.statusListenersShutdown)
+               if tun.netlinkCancel != nil {
+                       err1 = tun.netlinkCancel.Cancel()
+               }
+       } else if tun.events != nil {
+               close(tun.events)
        }
        err2 := tun.fd.Close()
        err3 := tun.fdCancel.Cancel()