[pulseaudio-discuss] Bug in pa_poll?

Marcel Müller mm0pointer at maazl.de
Sat Mar 17 02:13:26 PDT 2012


If select() in the implementation of pa_poll returns an error because of 
an invalid socket, pa_poll tries to find out which descriptor is bad. 
And then retries the select. But this is still in not synchronized 
context. So a second descriptor may become bad on the second call to 
select. This is not captured. And consequently pa_poll fails and the 
mainloop terminates, resulting in deadlocks if further activity is on 
the way.
It seems that I managed to trigger this problem on OS/2 from time to 
time when closing a pa_stream and a pa_context and opening another 
context at almost the same time.

I would recommend to jump to the previous select() call instead of 
executing another one without error checking. To avoid infinite loops 
this should only be done if the check removed at least one descriptor.


Marcel


More information about the pulseaudio-discuss mailing list