// interesting complications with its usage. This function returns the network
// interface ID and a flag if reboot is required.
func (pool Pool) CreateInterface(ifname string, requestedGUID *windows.GUID) (wintun *Interface, rebootRequired bool, err error) {
+ mutex, err := pool.takeNameMutex()
+ if err != nil {
+ return
+ }
+ defer func() {
+ windows.ReleaseMutex(mutex)
+ windows.CloseHandle(mutex)
+ }()
+
// Create an empty device info set for network adapter device class.
devInfoList, err := setupapi.SetupDiCreateDeviceInfoListEx(&deviceClassNetGUID, 0, "")
if err != nil {
return
}
- mutex, err := pool.takeNameMutex()
- if err != nil {
- return
- }
- defer func() {
- windows.ReleaseMutex(mutex)
- windows.CloseHandle(mutex)
- }()
-
defer func() {
if err != nil {
// The interface failed to install, or the interface ID was unobtainable. Clean-up.