[alsa-devel] [PATCH] alsa-lib: snd_pcm_delay and friends do not account for a write being currently in progress
John Lindgren
john.lindgren at tds.net
Thu Jun 3 16:00:48 CEST 2010
Thanks for your reply.
On Thu, 2010-06-03 at 08:40 +0200, Clemens Ladisch wrote:
> John Lindgren wrote:
> > In a multi-threaded application it is possible for snd_pcm_delay or an
> > equivalent function to be called by one thread while another is sitting
> > in snd_pcm_writei.
>
> Alsa-lib is not thread safe. In theory, you are not even allowed to
> call snd_pcm_delay while another function on the same PCM device has not
> yet returned.
>From http://alsa-project.org/main/index.php/Main_Page:
ALSA has the following significant features:
...
SMP and thread-safe design.
So, that's a big lie?
> ...
> > On the application side, the playback time counter will be calculated
> > during this time as 0.5 seconds written to ALSA
>
> This is wrong; as long as the write call has not returned, you do not
> know how much has been written (and when an error occurs, writing can
> stop before).
>
> To keep track of the actual amount of data written, use non-blocking
> mode and in a loop, write as much as possible in one call, then update
> your write counter, then wait for some more free space in the buffer
> with poll().
Would it work to simply call snd_pcm_wait?
John Lindgren
More information about the Alsa-devel
mailing list