]> git.ipfire.org Git - thirdparty/wireguard-go.git/commitdiff
tun: windows: delete interface before deleting file handles
authorJason A. Donenfeld <Jason@zx2c4.com>
Fri, 22 Mar 2019 22:45:03 +0000 (16:45 -0600)
committerJason A. Donenfeld <Jason@zx2c4.com>
Fri, 22 Mar 2019 22:45:58 +0000 (16:45 -0600)
tun/tun_windows.go

index 2d8364d7ac083dff4391de3b4dd051a566b591a9..b7f99478b14606d74e3c8f329db757c4fb6f293b 100644 (file)
@@ -214,18 +214,13 @@ func (tun *NativeTun) Events() chan TUNEvent {
 
 func (tun *NativeTun) Close() error {
        tun.close = true
-       err1 := tun.closeTUN()
-
        if tun.events != nil {
                close(tun.events)
        }
-
-       _, _, err2 := tun.wt.DeleteInterface(0)
-       if err1 == nil {
-               err1 = err2
-       }
-
-       return err1
+       /* We delete it first, before closing, so that the close operations don't hang with the concurrent read operation. */
+       _, _, err := tun.wt.DeleteInterface(0)
+       tun.closeTUN()
+       return err
 }
 
 func (tun *NativeTun) MTU() (int, error) {