aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/decode.c14
-rw-r--r--src/player.c3
2 files changed, 13 insertions, 4 deletions
diff --git a/src/decode.c b/src/decode.c
index fcda78a19..d32799d31 100644
--- a/src/decode.c
+++ b/src/decode.c
@@ -69,6 +69,7 @@ static void stopDecode(DecoderControl * dc)
{
if (decode_pid > 0 && (dc->start || dc->state != DECODE_STATE_STOP)) {
dc->stop = 1;
+ kill(decode_pid, SIGCONT);
while (decode_pid > 0 && dc->stop)
my_usleep(10000);
}
@@ -124,7 +125,8 @@ static int calculateCrossFadeChunks(PlayerControl * pc, AudioFormat * af)
ERROR("problems opening audio device while playing \"%s\"\n", pc->utf8url); \
quitDecode(pc,dc); \
return; \
- } \
+ } else if (decode_pid > 0) { \
+ kill(decode_pid, SIGCONT); }\
if (pause) { \
dropBufferedAudio(); \
closeAudioDevice(); \
@@ -236,6 +238,8 @@ static int decodeSeek(PlayerControl * pc, DecoderControl * dc,
pc->state = PLAYER_STATE_PAUSE; \
} else { \
if (openAudioDevice(NULL) >= 0) { \
+ if (decode_pid > 0) \
+ kill(decode_pid, SIGCONT); \
pc->state = PLAYER_STATE_PLAY; \
} else { \
pathcpy_trunc(pc->erroredUrl, pc->utf8url); \
@@ -577,9 +581,11 @@ static void decodeParent(PlayerControl * pc, DecoderControl * dc, OutputBuffer *
race conditions and weirdness */
end = cb->end;
- if (pause)
- my_usleep(10000);
- else if (cb->begin != end && cb->begin != next) {
+ if (pause) {
+ if (decode_pid)
+ kill(decode_pid, SIGSTOP);
+ kill(getpid(), SIGSTOP);
+ } else if (cb->begin != end && cb->begin != next) {
if (doCrossFade == 1 && next >= 0 &&
((next > cb->begin &&
(fadePosition = next - cb->begin)
diff --git a/src/player.c b/src/player.c
index 096503b19..e84f31828 100644
--- a/src/player.c
+++ b/src/player.c
@@ -239,6 +239,7 @@ int playerStop(int fd)
if (player_pid > 0 && pc->state != PLAYER_STATE_STOP) {
pc->stop = 1;
+ kill(player_pid, SIGCONT);
while (player_pid > 0 && pc->stop)
my_usleep(1000);
}
@@ -266,6 +267,8 @@ int playerPause(int fd)
if (player_pid > 0 && pc->state != PLAYER_STATE_STOP) {
pc->pause = 1;
+ if (player_pid > 0 && pc->state == PLAYER_STATE_PAUSE)
+ kill(player_pid, SIGCONT);
while (player_pid > 0 && pc->pause)
my_usleep(1000);
}