mirror of
https://github.com/navidrome/navidrome.git
synced 2026-05-03 06:51:16 +00:00
fix(scanner): resolve data race on conf.Server access in getScanner
Captured DevExternalScanner config value in the controller struct at construction time instead of reading the global conf.Server pointer in getScanner(). The background goroutine spawned by ScanFolders() was reading conf.Server.DevExternalScanner concurrently with test cleanup reassigning the conf.Server pointer, causing a data race detected by the race detector in the E2E test suite.
This commit is contained in:
parent
ed79a8897b
commit
fd09ca103f
@ -35,15 +35,16 @@ func New(rootCtx context.Context, ds model.DataStore, cw artwork.CacheWarmer, br
|
|||||||
broker: broker,
|
broker: broker,
|
||||||
pls: pls,
|
pls: pls,
|
||||||
metrics: m,
|
metrics: m,
|
||||||
|
devExternalScanner: conf.Server.DevExternalScanner,
|
||||||
}
|
}
|
||||||
if !conf.Server.DevExternalScanner {
|
if !c.devExternalScanner {
|
||||||
c.limiter = P(rate.Sometimes{Interval: conf.Server.DevActivityPanelUpdateRate})
|
c.limiter = P(rate.Sometimes{Interval: conf.Server.DevActivityPanelUpdateRate})
|
||||||
}
|
}
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *controller) getScanner() scanner {
|
func (s *controller) getScanner() scanner {
|
||||||
if conf.Server.DevExternalScanner {
|
if s.devExternalScanner {
|
||||||
return &scannerExternal{}
|
return &scannerExternal{}
|
||||||
}
|
}
|
||||||
return &scannerImpl{ds: s.ds, cw: s.cw, pls: s.pls}
|
return &scannerImpl{ds: s.ds, cw: s.cw, pls: s.pls}
|
||||||
@ -99,6 +100,7 @@ type controller struct {
|
|||||||
metrics metrics.Metrics
|
metrics metrics.Metrics
|
||||||
pls core.Playlists
|
pls core.Playlists
|
||||||
limiter *rate.Sometimes
|
limiter *rate.Sometimes
|
||||||
|
devExternalScanner bool
|
||||||
count atomic.Uint32
|
count atomic.Uint32
|
||||||
folderCount atomic.Uint32
|
folderCount atomic.Uint32
|
||||||
changesDetected bool
|
changesDetected bool
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user