From 6fbc9b3a98a6c84bd551bbc2e598ef479eb12c83 Mon Sep 17 00:00:00 2001 From: Brad Fitzpatrick Date: Mon, 15 Mar 2021 21:38:42 -0700 Subject: [PATCH] control/controlclient: cache Windows version To atone for 1d7f9d5b4a59b3e, the revert of 4224b3f73110f6f. At least it's fast again, even if it's shelling out to cmd.exe (once now). Updates #1478 Signed-off-by: Brad Fitzpatrick --- control/controlclient/hostinfo_windows.go | 9 +++++++++ 1 file changed, 9 insertions(+) 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 }