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