Hi Jaroslav, Thank you for the fix. I tried it and I don't have 0-written-frames anymore. To be sure that the fix works fine, I compared the multi scenario (forward+loopback) with the forward-only scenario. It works fine in both cases, but sometimes in the multi scenario I have underruns. Could it depend from the fix? Or the usage of multi itself can bring to underruns? -----Messaggio originale----- Da: Jaroslav Kysela <perex@xxxxxxxx> Inviato: martedì 9 aprile 2019 10:37 A: Giuliano Zannetti - ART S.p.A. <giuliano.zannetti@xxxxxxxxxxxxxxxx>; alsa-devel@xxxxxxxxxxxxxxxx Oggetto: Re: loopback snd_pcm_writei Dne 01. 04. 19 v 15:51 Giuliano Zannetti - ART S.p.A. napsal(a): > Hi, > > I have the configuration in the asound.conf above. > > my_plug - - > my_route - - > my_multi - - > slave0 (forward) > - - > slave1 (loopback) > > I open the plug my_plug in the block mode: > > writtenFrames = snd_pcm_writei(handle, bufferToWrite, bufferToWriteSize); > > The issue I see is that there are several "writes" with 0 written frames. It seems like the snd_pcm_writei does not hold until data will be written. In general, 0 written frames sounds weird to me, because snd_pcm_writei should block itself if no space is available in the circular buffer right? > > I have tried to fix the following method in pcm_multi.c, as Jaroslav Kysela suggests. > > -static int snd_pcm_multi_may_wait_for_avail_min(snd_pcm_t *pcm, snd_pcm_uframes_t avail ATTRIBUTE_UNUSED) > +static int snd_pcm_multi_may_wait_for_avail_min(snd_pcm_t *pcm, snd_pcm_uframes_t avail) > { > snd_pcm_multi_t *multi = pcm->private_data; > - snd_pcm_t *slave = multi->slaves[multi->master_slave].pcm; > - return snd_pcm_may_wait_for_avail_min(slave, snd_pcm_mmap_avail(slave)); > + unsigned int i; > + for (i = 0; i < multi->slaves_count; ++i) { > + if (snd_pcm_may_wait_for_avail_min(multi->slaves[i].pcm, avail)) > + return 1; > + } > + return 0; > } > > But unfortunately the issue has not been resolved. Hi, I did some debugging (it's pretty reproducible) and the real fixes are here: https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgit.alsa-project.org%2F%3Fp%3Dalsa-lib.git%3Ba%3Dcommit%3Bh%3D4694a6643dc09c5e41969d33ed98f42278a02d40&data=02%7C01%7Cgiuliano.zannetti%40artgroup-spa.com%7Ca95dd139ed42412885ec08d6bcc684ce%7C53c55efcdafd47099ce8f76299277497%7C0%7C1%7C636903958159477162&sdata=R9T2kwry3yRBJCA440vmGHFf6sTNeqblW67pCYnw1Is%3D&reserved=0 https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgit.alsa-project.org%2F%3Fp%3Dalsa-lib.git%3Ba%3Dcommit%3Bh%3Dc7fc3fdbe23e63757b0e2c88c0d7c029c660923b&data=02%7C01%7Cgiuliano.zannetti%40artgroup-spa.com%7Ca95dd139ed42412885ec08d6bcc684ce%7C53c55efcdafd47099ce8f76299277497%7C0%7C1%7C636903958159477162&sdata=Q06WlhuV0X2E0wrmTeYeUb9R1a3%2FVLkzC0K1dPYYqS0%3D&reserved=0 https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgit.alsa-project.org%2F%3Fp%3Dalsa-lib.git%3Ba%3Dcommit%3Bh%3D369df322577034ea872978d6470edbadf30d81a9&data=02%7C01%7Cgiuliano.zannetti%40artgroup-spa.com%7Ca95dd139ed42412885ec08d6bcc684ce%7C53c55efcdafd47099ce8f76299277497%7C0%7C1%7C636903958159477162&sdata=TyAfgfYoFIXNxlwH2CnBQ8cUftoHg6abCAxqtqgwfJU%3D&reserved=0 https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgit.alsa-project.org%2F%3Fp%3Dalsa-lib.git%3Ba%3Dcommit%3Bh%3D0bfad420efea328a50361bb3ed11487acf69da25&data=02%7C01%7Cgiuliano.zannetti%40artgroup-spa.com%7Ca95dd139ed42412885ec08d6bcc684ce%7C53c55efcdafd47099ce8f76299277497%7C0%7C1%7C636903958159477162&sdata=wfgo7N%2F6NsttszoE6fLTJ%2B4bYTMoUBLEps91qo4eIkE%3D&reserved=0 Just get the latest alsa-lib and it should work correctly now. Let me know the result. Thanks. Jaroslav -- Jaroslav Kysela <perex@xxxxxxxx> Linux Sound Maintainer; ALSA Project; Red Hat, Inc. _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx https://mailman.alsa-project.org/mailman/listinfo/alsa-devel