From d24a60b7818fafddb3ad27cc05cda82636880f64 Mon Sep 17 00:00:00 2001 From: Jeeja KP Date: Mon, 28 Nov 2016 22:02:00 +0530 Subject: [PATCH] aplay: Fix to handle pause when system is suspended/Resumed If PCM is paused and then we do system supend-resume, the stream throws error(EBADF) when stream is paused released. Check the pcm state before pause/release and if stream is suspended, call snd_pcm_resume to resume the stream. Signed-off-by: Vinod Koul Signed-off-by: Jeeja KP Signed-off-by: Takashi Iwai --- aplay/aplay.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/aplay/aplay.c b/aplay/aplay.c index 2da7dda..ee480f2 100644 --- a/aplay/aplay.c +++ b/aplay/aplay.c @@ -166,6 +166,8 @@ static void end_wave(int fd); static void begin_au(int fd, size_t count); static void end_au(int fd); +static void suspend(void); + static const struct fmt_capture { void (*start) (int fd, size_t count); void (*end) (int fd); @@ -1487,6 +1489,9 @@ static void do_pause(void) fprintf(stderr, _("\rPAUSE command ignored (no hw support)\n")); return; } + if (snd_pcm_state(handle) == SND_PCM_STATE_SUSPENDED) + suspend(); + err = snd_pcm_pause(handle, 1); if (err < 0) { error(_("pause push error: %s"), snd_strerror(err)); @@ -1496,6 +1501,8 @@ static void do_pause(void) while (read(fileno(stdin), &b, 1) != 1); if (b == ' ' || b == '\r') { while (read(fileno(stdin), &b, 1) == 1); + if (snd_pcm_state(handle) == SND_PCM_STATE_SUSPENDED) + suspend(); err = snd_pcm_pause(handle, 0); if (err < 0) error(_("pause release error: %s"), snd_strerror(err)); -- 2.47.1