From 52ec440d7977fad966002c3710ed9df957943407 Mon Sep 17 00:00:00 2001 From: "Jason A. Donenfeld" Date: Fri, 22 Mar 2019 16:45:03 -0600 Subject: [PATCH] tun: windows: delete interface before deleting file handles --- tun/tun_windows.go | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/tun/tun_windows.go b/tun/tun_windows.go index 2d8364d..b7f9947 100644 --- a/tun/tun_windows.go +++ b/tun/tun_windows.go @@ -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) {