aboutsummaryrefslogtreecommitdiffstats
path: root/src/player_thread.c
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2009-11-02 20:20:13 +0100
committerMax Kellermann <max@duempel.org>2009-11-02 20:20:13 +0100
commit408d52fe3995a34fe1559074fdabedd7589d512c (patch)
tree236547f67bec6e8276ee4bf861c3de6a6b6b20f8 /src/player_thread.c
parentb9013944dc80c70533aaaa0d5a446500a49e0607 (diff)
downloadmpd-408d52fe3995a34fe1559074fdabedd7589d512c.tar.gz
mpd-408d52fe3995a34fe1559074fdabedd7589d512c.tar.xz
mpd-408d52fe3995a34fe1559074fdabedd7589d512c.zip
player_thread: check command before waiting during pause
While paused, the player thread re-locks its mutex and waits for a signal. This is racy: when the command is set while the thread is waiting for the lock, it may wait forever. This patch adds another command check before player_wait().
Diffstat (limited to 'src/player_thread.c')
-rw-r--r--src/player_thread.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/player_thread.c b/src/player_thread.c
index 8f8466fc8..32d35f309 100644
--- a/src/player_thread.c
+++ b/src/player_thread.c
@@ -819,7 +819,9 @@ static void do_play(struct decoder_control *dc)
if (player.paused) {
player_lock();
- player_wait();
+
+ if (pc.command == PLAYER_COMMAND_NONE)
+ player_wait();
continue;
} else if (music_pipe_size(player.pipe) > 0) {
/* at least one music chunk is ready - send it