diff options
author | J. Alexander Treuman <jat@spatialrift.net> | 2007-06-04 23:14:38 +0000 |
---|---|---|
committer | J. Alexander Treuman <jat@spatialrift.net> | 2007-06-04 23:14:38 +0000 |
commit | 01faa6f4e30e2a75319ca2b402f19fca0a6ae9b6 (patch) | |
tree | 2574f0d79287585635a687a6c1f9fadd2de3f7bf | |
parent | 10860b33d47517411abf6766e13f39c2375b4b08 (diff) | |
download | mpd-01faa6f4e30e2a75319ca2b402f19fca0a6ae9b6.tar.gz mpd-01faa6f4e30e2a75319ca2b402f19fca0a6ae9b6.tar.xz mpd-01faa6f4e30e2a75319ca2b402f19fca0a6ae9b6.zip |
Set a flag if we've sent the player process SIGSTOP so that we know not to
wait for it to complete an action which it never will.
git-svn-id: https://svn.musicpd.org/mpd/trunk@6488 09075e82-0dd4-0310-85a5-a0d7c8717e4f
-rw-r--r-- | src/player.c | 12 | ||||
-rw-r--r-- | src/player.h | 1 | ||||
-rw-r--r-- | src/playerData.c | 1 |
3 files changed, 11 insertions, 3 deletions
diff --git a/src/player.c b/src/player.c index beff9b389..096503b19 100644 --- a/src/player.c +++ b/src/player.c @@ -110,11 +110,13 @@ void player_sigChldHandler(int pid, int status) int playerInit(void) { + PlayerControl *pc = &(getPlayerData()->playerControl); int pid; pid = player_pid; if (pid > 0) { kill(pid, SIGCONT); + pc->wait = 0; return 0; } @@ -124,8 +126,6 @@ int playerInit(void) { clock_t start = clock(); - PlayerControl *pc = &(getPlayerData()->playerControl); - unblockSignals(); setSigHandlersForDecoder(); @@ -184,16 +184,22 @@ int playerInit(void) int playerWait(int fd) { + PlayerControl *pc = &(getPlayerData()->playerControl); int pid; + if (pc->wait) + return 0; + if (playerStop(fd) < 0) return -1; playerCloseAudio(); pid = player_pid; - if (pid > 0) + if (pid > 0) { + pc->wait = 1; kill(pid, SIGSTOP); + } return 0; } diff --git a/src/player.h b/src/player.h index de44f8e64..17dcf16e0 100644 --- a/src/player.h +++ b/src/player.h @@ -57,6 +57,7 @@ #define PLAYER_METADATA_STATE_WRITE 2 typedef struct _PlayerControl { + volatile mpd_sint8 wait; volatile mpd_sint8 stop; volatile mpd_sint8 play; volatile mpd_sint8 pause; diff --git a/src/playerData.c b/src/playerData.c index 30ff6d6d6..380e4a148 100644 --- a/src/playerData.c +++ b/src/playerData.c @@ -118,6 +118,7 @@ void initPlayerData(void) buffered_chunks * sizeof(mpd_sint8)); buffer->acceptMetadata = 0; + playerData_pd->playerControl.wait = 0; playerData_pd->playerControl.stop = 0; playerData_pd->playerControl.pause = 0; playerData_pd->playerControl.play = 0; |