control/controlclient: cache Windows version
To atone for the revert of
At least it's fast again, even if it's shelling out to cmd.exe (once now).
Updates
import (
"os/exec"
"strings"
+ "sync/atomic"
"syscall"
)
@@ -14,7 +15,12 @@ func init() {
osVersion = osVersionWindows
}
+var winVerCache atomic.Value // of string
+
func osVersionWindows() string {
+ if s, ok := winVerCache.Load().(string); ok {
+ return s
+ }
cmd := exec.Command("cmd", "/c", "ver")
cmd.SysProcAttr = &syscall.SysProcAttr{HideWindow: true}
out, _ := cmd.Output() // "\nMicrosoft Windows [Version 10.0.19041.388]\n\n"
@@ -26,5 +32,8 @@ func osVersionWindows() string {
if sp := strings.Index(s, " "); sp != -1 {
s = s[sp+1:]
}
+ if s != "" {
+ winVerCache.Store(s)
+ }
return s // "10.0.19041.388", ideally
}
