[alsa-devel] Polling issues with the PCM multi plugin
Takashi Iwai
tiwai at suse.de
Thu Dec 13 08:25:18 CET 2012
At Wed, 12 Dec 2012 23:04:16 -0800,
Devin Anderson wrote:
>
> On Wed, Dec 12, 2012 at 10:34 PM, Takashi Iwai <tiwai at suse.de> wrote:
>
> >> 2.) If not, how should this operation be handled? I'm sure it *can*
> >> be handled in userspace by bypassing the multi and polling the file
> >> descriptors of all sound cards directly, but duplicating this code for
> >> each application that wants to poll multiple sound cards seems wrong.
> >
> > Actually there were multiple poll descriptors for multi plugin in the
> > early version of alsa-lib. But this was changed to a single fd by
> > some reason I don't remember. I thought there were too many broken
> > apps doing wrong for multiple fds.
>
> Are the apps really doing the wrong thing? It seems like
> `snd_pcm_poll_descriptors()` and `snd_pcm_poll_descriptor_revents()`
> are meant to operate on a single group of file descriptors, without
> interpreting what the availability of events on each particular file
> descriptor might mean. This leads to some problems.
Yes, grouping multiple descriptors gives ambiguity. It must be a part
of the problems.
> As an example, let's consider what the multi plugin should do when
> `snd_pcm_poll_descriptors_revents()` is called. It basically has two
> options:
>
> 1.) Return I/O events when one or more file descriptors have I/O events
>
> This is obviously problematic, as there may only be partial data
> available. This is also how the multi plugin works today.
Right, and this behavior hasn't been changed, AFAIK.
> 2.) Return I/O events when all file descriptors have I/O events.
>
> In this scenario, `poll()` will return when events are available on at
> least one poll descriptor, leading to busy waiting via `poll()` until
> I/O events are available on all file descriptors.
Never implemented in such a way, so far, because this can very easily
lead to XRUN.
Takashi
More information about the Alsa-devel
mailing list