fix(01-01): add mutex protection to Queue, Library, and Playlist SetContext methods
- Queue.SetContext acquires existing q.mu before writing q.ctx - Library struct gets new mu sync.Mutex; SetContext and SetRescanHooks acquire it - Playlist Service struct gets new mu sync.Mutex; SetContext and SetFavoritesConfig acquire it - Library and Playlist release lock before calling post-init methods (registerEventHandlers, migrateExistingPlaylists)
This commit is contained in:
@@ -76,6 +76,9 @@ type RescanHooks struct {
|
||||
|
||||
// Library manages scanning and querying the music collection.
|
||||
type Library struct {
|
||||
// mu protects ctx, conf, and rescanHooks from concurrent
|
||||
// access during initialization.
|
||||
mu sync.Mutex
|
||||
ctx context.Context
|
||||
logger *slog.Logger
|
||||
conf *Config
|
||||
@@ -86,6 +89,9 @@ type Library struct {
|
||||
// SetRescanHooks provides optional hooks for cross-cutting
|
||||
// orchestration during FullRescan.
|
||||
func (l *Library) SetRescanHooks(h RescanHooks) {
|
||||
l.mu.Lock()
|
||||
defer l.mu.Unlock()
|
||||
|
||||
l.rescanHooks = h
|
||||
}
|
||||
|
||||
@@ -118,7 +124,10 @@ func NewLibrary(
|
||||
|
||||
// SetContext sets the Wails runtime context and registers event handlers.
|
||||
func (l *Library) SetContext(ctx context.Context) {
|
||||
l.mu.Lock()
|
||||
l.ctx = ctx
|
||||
l.mu.Unlock()
|
||||
|
||||
l.registerEventHandlers()
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user