Added mutex for lastPlayedCache.
This commit is contained in:
parent
d3ffd01e0a
commit
21995ea4cd
@ -7,6 +7,7 @@ import (
|
|||||||
"net/http"
|
"net/http"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
"strings"
|
"strings"
|
||||||
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
@ -65,19 +66,27 @@ func IcecastGetStatus(icecastURL string) (*IcecastStatus, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func IcecastLastPlayedSongs(lastNSongs int, playlistPath string) ([]Song, error) {
|
func IcecastLastPlayedSongs(lastNSongs int, playlistPath string) ([]Song, error) {
|
||||||
if lpcLen := len(lastPlayedCache); lpcLen > 0 {
|
{
|
||||||
if lastNSongs > lpcLen {
|
lastPlayedCacheMutex.Lock()
|
||||||
lastNSongs = lpcLen
|
defer lastPlayedCacheMutex.Unlock()
|
||||||
|
if lpcLen := len(lastPlayedCache); lpcLen > 0 {
|
||||||
|
if lastNSongs > lpcLen {
|
||||||
|
lastNSongs = lpcLen
|
||||||
|
}
|
||||||
|
return lastPlayedCache[lpcLen-lastNSongs:], nil
|
||||||
}
|
}
|
||||||
return lastPlayedCache[lpcLen-lastNSongs:], nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return lastPlayedSongs(lastNSongs, playlistPath)
|
return lastPlayedSongs(lastNSongs, playlistPath)
|
||||||
}
|
}
|
||||||
|
|
||||||
func IcecastLastSong(playlistPath string) (Song, error) {
|
func IcecastLastSong(playlistPath string) (Song, error) {
|
||||||
if lpcLen := len(lastPlayedCache); lpcLen > 0 {
|
{
|
||||||
return lastPlayedCache[lpcLen-1], nil
|
lastPlayedCacheMutex.Lock()
|
||||||
|
defer lastPlayedCacheMutex.Unlock()
|
||||||
|
if lpcLen := len(lastPlayedCache); lpcLen > 0 {
|
||||||
|
return lastPlayedCache[lpcLen-1], nil
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
songs, err := lastPlayedSongs(1, playlistPath)
|
songs, err := lastPlayedSongs(1, playlistPath)
|
||||||
@ -121,6 +130,7 @@ func lastPlayedSongs(lastNSongs int, playlistPath string) ([]Song, error) {
|
|||||||
var playlistWatcher watcher.InotifyWatcher
|
var playlistWatcher watcher.InotifyWatcher
|
||||||
var playlistFired chan uint32
|
var playlistFired chan uint32
|
||||||
var lastPlayedCache []Song
|
var lastPlayedCache []Song
|
||||||
|
var lastPlayedCacheMutex sync.Mutex
|
||||||
|
|
||||||
func IcecastWatchPlaylist(playlistPath string, lastNSongs int) error {
|
func IcecastWatchPlaylist(playlistPath string, lastNSongs int) error {
|
||||||
playlistWatcher, err := watcher.NewInotifyWatcher()
|
playlistWatcher, err := watcher.NewInotifyWatcher()
|
||||||
@ -141,6 +151,8 @@ func IcecastWatchPlaylist(playlistPath string, lastNSongs int) error {
|
|||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
case <-playlistFired:
|
case <-playlistFired:
|
||||||
|
lastPlayedCacheMutex.Lock()
|
||||||
|
defer lastPlayedCacheMutex.Unlock()
|
||||||
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
|
||||||
|
Loading…
Reference in New Issue
Block a user