From 442b327582ed506ca872d20e03d9c23bea02a4a2 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Sat, 19 Jun 2010 13:15:42 +0200 Subject: playlist: protect acess to player state in playlist_sync() --- src/playlist.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'src/playlist.c') diff --git a/src/playlist.c b/src/playlist.c index 99feb28da..8929e417b 100644 --- a/src/playlist.c +++ b/src/playlist.c @@ -219,7 +219,12 @@ playlist_sync(struct playlist *playlist) playing anymore; ignore the event */ return; - if (pc_get_state() == PLAYER_STATE_STOP) + player_lock(); + enum player_state pc_state = pc_get_state(); + const struct song *pc_next_song = pc.next_song; + player_unlock(); + + if (pc_state == PLAYER_STATE_STOP) /* the player thread has stopped: check if playback should be restarted with the next song. That can happen if the playlist isn't filling the queue fast @@ -228,7 +233,7 @@ playlist_sync(struct playlist *playlist) else { /* check if the player thread has already started playing the queued song */ - if (pc.next_song == NULL && playlist->queued != -1) + if (pc_next_song == NULL && playlist->queued != -1) playlist_song_started(playlist); /* make sure the queued song is always set (if -- cgit v1.2.3