aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/manager/updatestate.go
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2021-10-26 18:51:52 +0200
committerJason A. Donenfeld <Jason@zx2c4.com>2021-10-27 19:04:36 +0200
commitea932e4304c17eddb63dbfbd4aa6d1b83b58c0d3 (patch)
treee6b7665a5465ad614053f203734f21c6fb5f4752 /manager/updatestate.go
parentembeddable-dll-service: update for new wgnt API (diff)
downloadwireguard-windows-ea932e4304c17eddb63dbfbd4aa6d1b83b58c0d3.tar.xz
wireguard-windows-ea932e4304c17eddb63dbfbd4aa6d1b83b58c0d3.zip
manager: delay boottime updates and simplify
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Diffstat (limited to 'manager/updatestate.go')
-rw-r--r--manager/updatestate.go29
1 files changed, 18 insertions, 11 deletions
diff --git a/manager/updatestate.go b/manager/updatestate.go
index 069e9b8a..5ea0f661 100644
--- a/manager/updatestate.go
+++ b/manager/updatestate.go
@@ -7,8 +7,10 @@ package manager
import (
"log"
+ unsafeRand "math/rand"
"time"
+ "golang.zx2c4.com/wireguard/windows/services"
"golang.zx2c4.com/wireguard/windows/updater"
"golang.zx2c4.com/wireguard/windows/version"
)
@@ -23,6 +25,10 @@ const (
var updateState = UpdateStateUnknown
+func jitterSleep(min, max time.Duration) {
+ time.Sleep(min + time.Duration(unsafeRand.Int63n(int64(max-min+1))))
+}
+
func checkForUpdates() {
if !version.IsRunningOfficialVersion() {
log.Println("Build is not official, so updates are disabled")
@@ -30,26 +36,27 @@ func checkForUpdates() {
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)
}
}
}