From 50b00d19578e3ccfb63424f10ddbba75b47b810d Mon Sep 17 00:00:00 2001 From: AnyCPU Date: Mon, 16 Feb 2026 00:26:50 +0200 Subject: [PATCH] Fix timer leak in PauseController by replacing time.After with time.NewTimer --- internal/server/pause_controller.go | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/internal/server/pause_controller.go b/internal/server/pause_controller.go index ba2e2421..09afc56c 100644 --- a/internal/server/pause_controller.go +++ b/internal/server/pause_controller.go @@ -106,7 +106,11 @@ func (p *PauseController) Resume() error { } func (p *PauseController) Wait() (PauseWaitAction, string) { - state, stopMessage, pauseChannel, failChannel := p.getWaitState() + state, stopMessage, pauseChannel, failTimer := p.getWaitState() + + if failTimer != nil { + defer failTimer.Stop() + } switch state { case PauseStateRunning: @@ -124,18 +128,18 @@ func (p *PauseController) Wait() (PauseWaitAction, string) { default: return PauseWaitActionProceed, "" } - case <-failChannel: + case <-failTimer.C: return PauseWaitActionTimedOut, "" } } } -func (p *PauseController) getWaitState() (PauseState, string, chan bool, <-chan time.Time) { +func (p *PauseController) getWaitState() (PauseState, string, chan bool, *time.Timer) { p.lock.RLock() defer p.lock.RUnlock() if p.State == PauseStatePaused { - return PauseStatePaused, "", p.pauseChannel, time.After(p.FailAfter) + return PauseStatePaused, "", p.pauseChannel, time.NewTimer(p.FailAfter) } return p.State, p.StopMessage, nil, nil