From a17cd71f0db4d3e9016c12873cd07cdd6091c1b8 Mon Sep 17 00:00:00 2001 From: Anton Potekhin Date: Tue, 2 May 2023 15:46:34 +0300 Subject: [PATCH] Improved sleep prevention (#255) * Added timeout before clear EXECUTION_STATE flags to give time on episodes changing. * Added timeout before clear EXECUTION_STATE flags to give time on episodes changing. --------- Co-authored-by: Anton Potekhin --- server/cmd/preconfig_win.go | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/server/cmd/preconfig_win.go b/server/cmd/preconfig_win.go index ca31f4f..721d3ea 100644 --- a/server/cmd/preconfig_win.go +++ b/server/cmd/preconfig_win.go @@ -19,6 +19,7 @@ const ( ) var pulseTime = 60 * time.Second +var clearFlagTimeout = 3 * 60 * time.Second func Preconfig(kill bool) { go func() { @@ -31,6 +32,7 @@ func Preconfig(kill bool) { normalExecutionState := uintptr(EsContinuous) systemRequireState := uintptr(EsSystemRequired | EsContinuous) pulse := time.NewTicker(pulseTime) + var clearFlagTime int64 = -1 for { select { case <-pulse.C: @@ -51,8 +53,17 @@ func Preconfig(kill bool) { if !systemRequired && currentExecState != normalExecutionState { // Clear EXECUTION_STATE flags to disable away mode and allow the system to idle to sleep normally. - currentExecState = normalExecutionState - setThreadExecStateProc.Call(normalExecutionState) + + // Avoid clear flag immediately to add time to start next episode + if clearFlagTime == -1 { + clearFlagTime = time.Now().Unix() + int64(clearFlagTimeout.Seconds()) + } + + if clearFlagTime >= time.Now().Unix() { + clearFlagTime = -1 + currentExecState = normalExecutionState + setThreadExecStateProc.Call(normalExecutionState) + } } } }