diff options
author | Eric Wong <normalperson@yhbt.net> | 2007-09-06 00:19:33 +0000 |
---|---|---|
committer | Eric Wong <normalperson@yhbt.net> | 2007-09-06 00:19:33 +0000 |
commit | fe584bb11c20fbc42055070f27c2a1c62e7e38e3 (patch) | |
tree | 47691977629223cc9da5eda4625c0d8121fb6e76 | |
parent | b2ae8da5097b637f9b1a1a6ae98eee6a82e2cfe4 (diff) | |
download | mpd-fe584bb11c20fbc42055070f27c2a1c62e7e38e3.tar.gz mpd-fe584bb11c20fbc42055070f27c2a1c62e7e38e3.tar.xz mpd-fe584bb11c20fbc42055070f27c2a1c62e7e38e3.zip |
send SIGCONT to the player process whenever we need to busy wait on it
This fixes the problem of playlist moving/changnig while we're paused
Followup to r6822
git-svn-id: https://svn.musicpd.org/mpd/trunk@6859 09075e82-0dd4-0310-85a5-a0d7c8717e4f
-rw-r--r-- | src/player.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/src/player.c b/src/player.c index 6ae46eded..700d37b51 100644 --- a/src/player.c +++ b/src/player.c @@ -194,6 +194,10 @@ int playerWait(int fd) if (pc->wait) return 0; + pid = player_pid; + if (pid > 0) + kill(pid, SIGCONT); + if (playerStop(fd) < 0) return -1; @@ -231,6 +235,8 @@ int playerPlay(int fd, Song * song) } resetPlayerMetadata(); + if (player_pid) + kill(player_pid, SIGCONT); while (player_pid > 0 && pc->play) my_usleep(1000); @@ -380,6 +386,7 @@ void playerCloseAudio(void) if (playerStop(STDERR_FILENO) < 0) return; pc->closeAudio = 1; + kill(player_pid, SIGCONT); while (player_pid > 0 && pc->closeAudio) my_usleep(1000); } @@ -425,6 +432,7 @@ void playerQueueLock(void) PlayerControl *pc = &(getPlayerData()->playerControl); if (player_pid > 0 && pc->queueLockState == PLAYER_QUEUE_UNLOCKED) { + kill(player_pid, SIGCONT); pc->lockQueue = 1; while (player_pid > 0 && pc->lockQueue) my_usleep(1000); @@ -436,6 +444,7 @@ void playerQueueUnlock(void) PlayerControl *pc = &(getPlayerData()->playerControl); if (player_pid > 0 && pc->queueLockState == PLAYER_QUEUE_LOCKED) { + kill(player_pid, SIGCONT); pc->unlockQueue = 1; while (player_pid > 0 && pc->unlockQueue) my_usleep(1000); @@ -467,6 +476,8 @@ int playerSeek(int fd, Song * song, float time) resetPlayerMetadata(); pc->seekWhere = time; pc->seek = 1; + if (player_pid) + kill(player_pid, SIGCONT); while (player_pid > 0 && pc->seek) my_usleep(1000); } |