diff options
Diffstat (limited to '')
-rw-r--r-- | manager/updatestate.go | 36 |
1 files changed, 22 insertions, 14 deletions
diff --git a/manager/updatestate.go b/manager/updatestate.go index b54cc367..d5a19c8d 100644 --- a/manager/updatestate.go +++ b/manager/updatestate.go @@ -1,6 +1,6 @@ /* SPDX-License-Identifier: MIT * - * Copyright (C) 2019 WireGuard LLC. All Rights Reserved. + * Copyright (C) 2019-2022 WireGuard LLC. All Rights Reserved. */ package manager @@ -8,11 +8,16 @@ package manager import ( "log" "time" + _ "unsafe" + "golang.zx2c4.com/wireguard/windows/services" "golang.zx2c4.com/wireguard/windows/updater" "golang.zx2c4.com/wireguard/windows/version" ) +//go:linkname fastrandn runtime.fastrandn +func fastrandn(n uint32) uint32 + type UpdateState uint32 const ( @@ -23,35 +28,38 @@ const ( var updateState = UpdateStateUnknown -func checkForUpdates() { - defer printPanic() +func jitterSleep(min, max time.Duration) { + time.Sleep(min + time.Millisecond*time.Duration(fastrandn(uint32((max-min+1)/time.Millisecond)))) +} +func checkForUpdates() { if !version.IsRunningOfficialVersion() { log.Println("Build is not official, so updates are disabled") updateState = UpdateStateUpdatesDisabledUnofficialBuild IPCServerNotifyUpdateFound(updateState) return } - - first := true + if services.StartedAtBoot() { + jitterSleep(time.Minute*2, time.Minute*5) + } + noError, didNotify := true, false for { update, err := updater.CheckForUpdate() - if err == nil && update != nil { + if err == nil && update != nil && !didNotify { log.Println("An update is available") updateState = UpdateStateFoundUpdate IPCServerNotifyUpdateFound(updateState) - return - } - if err != nil { + didNotify = true + } else if err != nil && !didNotify { log.Printf("Update checker: %v", err) - if first { - time.Sleep(time.Minute * 4) - first = false + if noError { + jitterSleep(time.Minute*4, time.Minute*6) + noError = false } else { - time.Sleep(time.Minute * 25) + jitterSleep(time.Minute*25, time.Minute*30) } } else { - time.Sleep(time.Hour) + jitterSleep(time.Hour-time.Minute*3, time.Hour+time.Minute*3) } } } |