]> git.ipfire.org Git - thirdparty/wireguard-go.git/commitdiff
wintun: cleanup earlier
authorJason A. Donenfeld <Jason@zx2c4.com>
Tue, 27 Aug 2019 16:54:49 +0000 (10:54 -0600)
committerJason A. Donenfeld <Jason@zx2c4.com>
Tue, 27 Aug 2019 17:59:15 +0000 (11:59 -0600)
tun/wintun/wintun_windows.go

index f5d42eb2b349500384e8120283899bb28ee91f98..3566a76a868d00171ed08cc20373b5cc20429f52 100644 (file)
@@ -257,6 +257,26 @@ func CreateInterface(requestedGUID *windows.GUID) (wintun *Wintun, rebootRequire
                return
        }
 
+       defer func() {
+               if err != nil {
+                       // The interface failed to install, or the interface ID was unobtainable. Clean-up.
+                       removeDeviceParams := setupapi.RemoveDeviceParams{
+                               ClassInstallHeader: *setupapi.MakeClassInstallHeader(setupapi.DIF_REMOVE),
+                               Scope:              setupapi.DI_REMOVEDEVICE_GLOBAL,
+                       }
+
+                       // Set class installer parameters for DIF_REMOVE.
+                       if devInfoList.SetClassInstallParams(deviceData, &removeDeviceParams.ClassInstallHeader, uint32(unsafe.Sizeof(removeDeviceParams))) == nil {
+                               // Call appropriate class installer.
+                               if devInfoList.CallClassInstaller(setupapi.DIF_REMOVE, deviceData) == nil {
+                                       rebootRequired = rebootRequired || checkReboot(devInfoList, deviceData)
+                               }
+                       }
+
+                       wintun = nil
+               }
+       }()
+
        // Call appropriate class installer.
        err = devInfoList.CallClassInstaller(setupapi.DIF_REGISTERDEVICE, deviceData)
        if err != nil {
@@ -293,25 +313,6 @@ func CreateInterface(requestedGUID *windows.GUID) (wintun *Wintun, rebootRequire
 
        // Install interfaces if any. (Ignore errors)
        devInfoList.CallClassInstaller(setupapi.DIF_INSTALLINTERFACES, deviceData)
-       defer func() {
-               if err != nil {
-                       // The interface failed to install, or the interface ID was unobtainable. Clean-up.
-                       removeDeviceParams := setupapi.RemoveDeviceParams{
-                               ClassInstallHeader: *setupapi.MakeClassInstallHeader(setupapi.DIF_REMOVE),
-                               Scope:              setupapi.DI_REMOVEDEVICE_GLOBAL,
-                       }
-
-                       // Set class installer parameters for DIF_REMOVE.
-                       if devInfoList.SetClassInstallParams(deviceData, &removeDeviceParams.ClassInstallHeader, uint32(unsafe.Sizeof(removeDeviceParams))) == nil {
-                               // Call appropriate class installer.
-                               if devInfoList.CallClassInstaller(setupapi.DIF_REMOVE, deviceData) == nil {
-                                       rebootRequired = rebootRequired || checkReboot(devInfoList, deviceData)
-                               }
-                       }
-
-                       wintun = nil
-               }
-       }()
 
        // Install the device.
        err = devInfoList.CallClassInstaller(setupapi.DIF_INSTALLDEVICE, deviceData)