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@de.adit-jv.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
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;
}
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);