@@ -22,6 +22,7 @@ import (
2222 "github.com/yktoo/ymuse/internal/config"
2323 "github.com/yktoo/ymuse/internal/generated"
2424 "github.com/yktoo/ymuse/internal/util"
25+ "sync"
2526 "time"
2627)
2728
@@ -65,6 +66,7 @@ type PrefsDialog struct {
6566 queueColumns []queueCol
6667 // Timer for delayed player setting change callback invocation
6768 playerSettingChangeTimer * time.Timer
69+ playerSettingChangeMutex sync.Mutex
6870 // Callbacks
6971 onQueueColumnsChanged func ()
7072 onPlayerSettingChanged func ()
@@ -337,15 +339,18 @@ func (d *PrefsDialog) populateColumns() {
337339
338340func (d * PrefsDialog ) schedulePlayerSettingChange () {
339341 // Cancel the currently scheduled callback, if any
342+ d .playerSettingChangeMutex .Lock ()
343+ defer d .playerSettingChangeMutex .Unlock ()
340344 if d .playerSettingChangeTimer != nil {
341345 d .playerSettingChangeTimer .Stop ()
342346 }
347+
343348 // Schedule a new callback
344349 d .playerSettingChangeTimer = time .AfterFunc (time .Second , func () {
345- util . WhenIdle ( "onPlayerSettingChanged()" , func () {
346- d .playerSettingChangeTimer = nil
347- d . onPlayerSettingChanged ()
348- } )
350+ d . playerSettingChangeMutex . Lock ()
351+ d .playerSettingChangeTimer = nil
352+ d . playerSettingChangeMutex . Unlock ()
353+ util . WhenIdle ( "onPlayerSettingChanged()" , d . onPlayerSettingChanged )
349354 })
350355}
351356
0 commit comments