From: Jason A. Donenfeld Date: Fri, 22 Mar 2019 22:45:03 +0000 (-0600) Subject: tun: windows: delete interface before deleting file handles X-Git-Tag: 0.0.20190409~9 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=52ec440d7977fad966002c3710ed9df957943407;p=thirdparty%2Fwireguard-go.git tun: windows: delete interface before deleting file handles --- 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) {