wgengine/router: lock goroutine to OS thread before using OLE [windows]

See https://github.com/tailscale/tailscale/issues/921#issuecomment-727526807

Not yet sure whether this is our problem, but it can't hurt at least,
and seems like what we're supposed to do.

Updates #921
pull/933/head
Brad Fitzpatrick 4 years ago
parent 7a01cd27ca
commit fc8bc76e58

@ -11,6 +11,7 @@ import (
"fmt"
"log"
"net"
"runtime"
"sort"
"time"
@ -165,6 +166,13 @@ func setPrivateNetwork(ifcGUID *windows.GUID) (bool, error) {
categoryPrivate = 1
categoryDomain = 2
)
// Lock OS thread when using OLE, which seems to be a requirement
// from the Microsoft docs. go-ole doesn't seem to handle it automatically.
// https://github.com/tailscale/tailscale/issues/921#issuecomment-727526807
runtime.LockOSThread()
defer runtime.UnlockOSThread()
var c ole.Connection
if err := c.Initialize(); err != nil {
return false, fmt.Errorf("c.Initialize: %v", err)

Loading…
Cancel
Save