mirror of
https://github.com/navidrome/navidrome.git
synced 2026-10-10 11:27:11 +02:00
fix(jukebox): stop leaking timers in IPC timeout wrappers
time.After keeps its underlying timer alive until it fires, even when the select's other branch already won. Switch to time.NewTimer with a deferred Stop() so the timer is released immediately on the fast path. Addresses review feedback from gemini-code-assist on #5715.
This commit is contained in:
parent
6cf115c4e1
commit
587ea81702
1 changed files with 9 additions and 3 deletions
|
|
@ -49,10 +49,12 @@ func (t *MpvTrack) getWithTimeout(property string) (interface{}, error) {
|
|||
val, err := t.Conn.Get(property)
|
||||
ch <- result{val, err}
|
||||
}()
|
||||
timer := time.NewTimer(ipcTimeout)
|
||||
defer timer.Stop()
|
||||
select {
|
||||
case res := <-ch:
|
||||
return res.val, res.err
|
||||
case <-time.After(ipcTimeout):
|
||||
case <-timer.C:
|
||||
return nil, errIPCTimeout
|
||||
}
|
||||
}
|
||||
|
|
@ -62,10 +64,12 @@ func (t *MpvTrack) setWithTimeout(property string, value interface{}) error {
|
|||
go func() {
|
||||
ch <- t.Conn.Set(property, value)
|
||||
}()
|
||||
timer := time.NewTimer(ipcTimeout)
|
||||
defer timer.Stop()
|
||||
select {
|
||||
case err := <-ch:
|
||||
return err
|
||||
case <-time.After(ipcTimeout):
|
||||
case <-timer.C:
|
||||
return errIPCTimeout
|
||||
}
|
||||
}
|
||||
|
|
@ -80,10 +84,12 @@ func (t *MpvTrack) callWithTimeout(args ...interface{}) (interface{}, error) {
|
|||
val, err := t.Conn.Call(args...)
|
||||
ch <- result{val, err}
|
||||
}()
|
||||
timer := time.NewTimer(ipcTimeout)
|
||||
defer timer.Stop()
|
||||
select {
|
||||
case res := <-ch:
|
||||
return res.val, res.err
|
||||
case <-time.After(ipcTimeout):
|
||||
case <-timer.C:
|
||||
return nil, errIPCTimeout
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue