[alsa-devel] [PATCH] alsa-lib:Make snd_atomic_write_* truly atomic

Ricard Wanderlof ricard.wanderlof at axis.com
Tue May 17 17:28:43 CEST 2016


On Tue, 17 May 2016, Takashi Iwai wrote:

> No, my proposal is to make all snd_atomic_*() NOP unless a configure
> option is passed.

Ok, I must honestly say I hadn't studied the actual pcm_plugin.c code in 
great detail before (I didn't create the patch but was in the train of 
discussion at the time). I had just assumed that the w->begin and w->end 
variables were some form of counters used outside the atomic functions, 
but I can see now that they are not.

Looking at it now it appears that all this atomic stuff is trying to 
accomplish is to avoid the (sole) read in snd_pcm_plugin_status() from 
happening during one of the many potential writes in the other functions 
in the file, and the only reason for that in turn seems to be to get the 
acceses to *pcm->appl.ptr and *pcm->hw.ptr as well as other things needed 
for the return snd_pcm_status_t* consistent.

But that in turn means that fixing the atomicity of the w->begin and 
w->end accesses as proposed in the patch just glosses over that particular 
implementation issue; if indeed something is calling the functions doing 
the writes concurrently, something else is bound to get screwed up, unless 
by chance the two calls touch different variables, or the timing is such 
that two things aren't touched at the same time.

Right now it feels a bit uncomfortable to fix it in this way. It's just 
luck if it doesn't die somewhere else. Or am I missing something (highly 
likely)?

/Ricard
-- 
Ricard Wolf Wanderlöf                           ricardw(at)axis.com
Axis Communications AB, Lund, Sweden            www.axis.com
Phone +46 46 272 2016                           Fax +46 46 13 61 30


More information about the Alsa-devel mailing list