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 #921pull/933/head
parent
7a01cd27ca
commit
fc8bc76e58
|
@ -11,6 +11,7 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
"net"
|
"net"
|
||||||
|
"runtime"
|
||||||
"sort"
|
"sort"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
@ -165,6 +166,13 @@ func setPrivateNetwork(ifcGUID *windows.GUID) (bool, error) {
|
||||||
categoryPrivate = 1
|
categoryPrivate = 1
|
||||||
categoryDomain = 2
|
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
|
var c ole.Connection
|
||||||
if err := c.Initialize(); err != nil {
|
if err := c.Initialize(); err != nil {
|
||||||
return false, fmt.Errorf("c.Initialize: %v", err)
|
return false, fmt.Errorf("c.Initialize: %v", err)
|
||||||
|
|
Loading…
Reference in New Issue