diff --git a/control/controlclient/hostinfo_windows.go b/control/controlclient/hostinfo_windows.go index 07cb4ce4e..07a5d4006 100644 --- a/control/controlclient/hostinfo_windows.go +++ b/control/controlclient/hostinfo_windows.go @@ -7,6 +7,7 @@ package controlclient 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 }