1
0

ModMask replaced wuth ModIgnMask. Now IN_IGNORED being watched, it makes watcher to reinstantiate.

This commit is contained in:
Alexander Andreev 2022-05-24 23:20:19 +04:00
parent ef27662de5
commit 60dcf2c11c
Signed by: Arav
GPG Key ID: 0388CC8FAA51063F

View File

@ -8,6 +8,7 @@ import (
"os/exec"
"strings"
"sync"
"syscall"
"time"
"github.com/pkg/errors"
@ -143,31 +144,39 @@ func IcecastWatchPlaylist(playlistPath string, lastNSongs int) error {
return errors.Wrap(err, "cannot instantiate inotify watcher")
}
err = playlistWatcher.AddWatch(playlistPath, watcher.ModMask)
err = playlistWatcher.AddWatch(playlistPath, watcher.ModIgnMask)
if err != nil {
return errors.Wrap(err, "cannot set a playlist to watch")
}
playlistWatcher.WatchForMask(playlistFired, watcher.ModMask)
playlistWatcher.WatchForMask(playlistFired, watcher.ModIgnMask)
go func() {
for {
select {
case <-playlistFired:
case mask := <-playlistFired:
if mask&syscall.IN_MODIFY > 0 {
lastPlayedCacheMutex.Lock()
songs, err := lastPlayedSongs(lastNSongs, playlistPath)
if err == nil && len(songs) > 0 {
lastPlayedCache = songs
}
lastPlayedCacheMutex.Unlock()
} else if mask&syscall.IN_IGNORED > 0 {
playlistWatcher.Close()
IcecastWatchPlaylist(playlistPath, lastNSongs)
return
}
}
}
}()
lastPlayedCacheMutex.Lock()
songs, err := lastPlayedSongs(lastNSongs, playlistPath)
if err == nil && len(songs) > 0 {
lastPlayedCache = songs
}
lastPlayedCacheMutex.Unlock()
return nil
}