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
This commit is contained in:
Brad Fitzpatrick 2020-11-16 09:55:44 -08:00
parent 7a01cd27ca
commit fc8bc76e58

View File

@ -11,6 +11,7 @@
"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)