aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2007-09-06 00:19:33 +0000
committerEric Wong <normalperson@yhbt.net>2007-09-06 00:19:33 +0000
commitfe584bb11c20fbc42055070f27c2a1c62e7e38e3 (patch)
tree47691977629223cc9da5eda4625c0d8121fb6e76
parentb2ae8da5097b637f9b1a1a6ae98eee6a82e2cfe4 (diff)
downloadmpd-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
Diffstat (limited to '')
-rw-r--r--src/player.c11
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);
}