From 4f93ea7895ec371f3d585087f04e4d5393a9bde2 Mon Sep 17 00:00:00 2001 From: sentriz Date: Thu, 28 Nov 2019 17:19:04 +0000 Subject: [PATCH] reset tracking variables after start scan forgot about this when i admin and subsonic handlers reuse the same scanner struct --- scanner/scanner.go | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/scanner/scanner.go b/scanner/scanner.go index 4a8e607..62a63ab 100644 --- a/scanner/scanner.go +++ b/scanner/scanner.go @@ -30,11 +30,9 @@ func IsScanning() bool { return atomic.LoadInt32(&isScanning) == 1 } -func SetScanning(status bool) { - switch { - case status: - atomic.StoreInt32(&isScanning, 1) - default: +func SetScanning() func() { + atomic.StoreInt32(&isScanning, 1) + return func() { atomic.StoreInt32(&isScanning, 0) } } @@ -74,8 +72,16 @@ func (s *Scanner) Start() error { if IsScanning() { return errors.New("already scanning") } - SetScanning(true) - defer SetScanning(false) + unSet := SetScanning() + defer unSet() + // reset tracking variables when finished + defer func() { + s.seenTracks = make(map[int]struct{}) + s.seenFolders = make(map[int]struct{}) + s.curFolders = &stack.Stack{} + s.seenTracksNew = 0 + s.seenTracksErr = 0 + }() // // being walking start := time.Now()