lib/scanner: Fix ticker leak in scanner (fixes #9417) (#9451)

Move the ticker closer to where it's used and defer stop it to avoid
missing a branch.

Fixes regression introduced in
2f3eacdb6c

Fixes https://github.com/syncthing/syncthing/issues/9417
This commit is contained in:
Simon Frei 2024-03-05 19:04:26 +01:00 committed by GitHub
parent eb9cd363d0
commit 2ab2488274
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -142,8 +142,6 @@ func (w *walker) walk(ctx context.Context) chan ScanResult {
w.ProgressTickIntervalS = 2 w.ProgressTickIntervalS = 2
} }
ticker := time.NewTicker(time.Duration(w.ProgressTickIntervalS) * time.Second)
// We need to emit progress events, hence we create a routine which buffers // We need to emit progress events, hence we create a routine which buffers
// the list of files to be hashed, counts the total number of // the list of files to be hashed, counts the total number of
// bytes to hash, and once no more files need to be hashed (chan gets closed), // bytes to hash, and once no more files need to be hashed (chan gets closed),
@ -188,17 +186,17 @@ func (w *walker) walk(ctx context.Context) chan ScanResult {
}) })
} }
ticker := time.NewTicker(time.Duration(w.ProgressTickIntervalS) * time.Second)
defer ticker.Stop()
for { for {
select { select {
case <-done: case <-done:
emitProgressEvent() emitProgressEvent()
l.Debugln(w, "Walk progress done", w.Folder, w.Subs, w.Matcher) l.Debugln(w, "Walk progress done", w.Folder, w.Subs, w.Matcher)
ticker.Stop()
return return
case <-ticker.C: case <-ticker.C:
emitProgressEvent() emitProgressEvent()
case <-ctx.Done(): case <-ctx.Done():
ticker.Stop()
return return
} }
} }