diff options
author | Max Kellermann <max@duempel.org> | 2009-11-02 20:20:13 +0100 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2009-11-02 20:20:13 +0100 |
commit | 408d52fe3995a34fe1559074fdabedd7589d512c (patch) | |
tree | 236547f67bec6e8276ee4bf861c3de6a6b6b20f8 /src/player_thread.c | |
parent | b9013944dc80c70533aaaa0d5a446500a49e0607 (diff) | |
download | mpd-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.c | 4 |
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 |