[alsa-devel] [PATCH - IOPLUG 1/1] pcm: ioplug: update Prepare and draining state correctly

twischer at de.adit-jv.com twischer at de.adit-jv.com
Fri Mar 16 11:02:54 CET 2018


From: Timo Wischer <twischer at de.adit-jv.com>

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 <twischer at de.adit-jv.com>

diff --git a/src/pcm/pcm_ioplug.c b/src/pcm/pcm_ioplug.c
index af223a1..e60b688 100644
--- a/src/pcm/pcm_ioplug.c
+++ b/src/pcm/pcm_ioplug.c
@@ -146,13 +146,18 @@ 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;
+
+	gettimestamp(&io->trigger_tstamp, pcm->tstamp_type);
+	io->data->state = SND_PCM_STATE_PREPARED;
+
 	return err;
 }
 
@@ -493,6 +498,10 @@ static int snd_pcm_ioplug_drain(snd_pcm_t *pcm)
 
 	if (io->data->state == SND_PCM_STATE_OPEN)
 		return -EBADFD;
+
+	gettimestamp(&io->trigger_tstamp, pcm->tstamp_type);
+	io->data->state = SND_PCM_STATE_DRAINING;
+
 	if (io->data->callback->drain)
 		io->data->callback->drain(io->data);
 	snd_pcm_lock(pcm);
-- 
2.7.4



More information about the Alsa-devel mailing list