From 07a17bd5a50289e2fdb2714a4e39f38f41811558 Mon Sep 17 00:00:00 2001 From: Timo Wischer Date: Fri, 16 Mar 2018 11:20:46 +0100 Subject: [PATCH] pcm: ioplug: update prepare and draining state correctly PREPARED should only be set when it is done and it was successfully. DRAINING should be signalled when starting to drain. There is no need to check if draining was successfully because it will change to drop (SETUP) in any case. Signed-off-by: Timo Wischer Signed-off-by: Takashi Iwai --- src/pcm/pcm_ioplug.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/pcm/pcm_ioplug.c b/src/pcm/pcm_ioplug.c index af223a13..8c0ed483 100644 --- a/src/pcm/pcm_ioplug.c +++ b/src/pcm/pcm_ioplug.c @@ -146,13 +146,16 @@ static int snd_pcm_ioplug_prepare(snd_pcm_t *pcm) ioplug_priv_t *io = pcm->private_data; int err = 0; - io->data->state = SND_PCM_STATE_PREPARED; snd_pcm_ioplug_reset(pcm); if (io->data->callback->prepare) { snd_pcm_unlock(pcm); /* to avoid deadlock */ err = io->data->callback->prepare(io->data); snd_pcm_lock(pcm); } + if (err < 0) + return err; + + io->data->state = SND_PCM_STATE_PREPARED; return err; } @@ -493,6 +496,8 @@ static int snd_pcm_ioplug_drain(snd_pcm_t *pcm) if (io->data->state == SND_PCM_STATE_OPEN) return -EBADFD; + + io->data->state = SND_PCM_STATE_DRAINING; if (io->data->callback->drain) io->data->callback->drain(io->data); snd_pcm_lock(pcm); -- 2.47.1