From 4bbf9b9b6b3b4c656a83d038c9397f58712a5cc2 Mon Sep 17 00:00:00 2001 From: Jari Vetoniemi Date: Wed, 31 Oct 2018 05:30:11 +0200 Subject: store open mode to avoid state changes we don't have to reopen the device if it's already nonblocking or not for example. --- libasound.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/libasound.c b/libasound.c index 404cbd9..8a3dd62 100644 --- a/libasound.c +++ b/libasound.c @@ -149,6 +149,7 @@ struct _snd_pcm { const char *name; snd_pcm_uframes_t position, written; snd_pcm_stream_t stream; + int mode; bool started; }; @@ -193,6 +194,7 @@ device_open(snd_pcm_t *pcm, const char *name, snd_pcm_stream_t stream, int mode) } sio_onmove(hdl, onmove, pcm); + pcm->mode = mode; return hdl; } @@ -231,8 +233,10 @@ snd_pcm_name(snd_pcm_t *pcm) int snd_pcm_nonblock(snd_pcm_t *pcm, int nonblock) { - WARNX("snd_pcm_nonblock(%d)", nonblock); + if ((pcm->mode == SND_PCM_NONBLOCK && nonblock) || (!pcm->mode && !nonblock)) + return 0; + WARNX("snd_pcm_nonblock(%d)", nonblock); snd_pcm_drain(pcm); sio_close(pcm->hdl); -- cgit v1.2.3-70-g09d2