[pulseaudio-discuss] making a custom mainloop robust to clock changes

Sébastien Barthélémy barthelemy at crans.org
Mon May 18 11:56:42 PDT 2015


Hello,

I'm looking at how our pulseaudio client behaves if the CLOCK_REALTIME is
changed.

So I'm changing set the clock randomly every second and watching the result.

In some cases our application fails to get the stream latency: our
callback, which was set using pa_stream_update_timing_info(), is called (in
stream_get_timing_info_callback  [1]) with o->stream->timing_info_valid ==
FALSE.

My guess is that, in the test a bit above ([2]). we have
command==PA_COMMAND_TIMEOUT.

Is there any way to test that hypothesis?


It seems indeed that one sets a callback timeout using a pa_rtclock time
point [3] (and not just a the timeout duration), which is then (see
pa_timeval_rtstore [4]) converted to a CLOCK_REALTIME time point.

I expect that pa_rtclock uses CLOCK_MONOTONIC internally, but converting it
to CLOCK_REALTIME makes the timeout mechanism vulnerable to clock changes.

There is apparently some mechanism (enabled at [5], back in 2009 [6]) to
use pa_rtclock time points for the timeout, but if found no way to enable
it for our custom mainloop. Did I miss something?

Moreover, it involves setting some magical bit in the timeval to indicate
this is a "rtclock" one. Does someone recall the reason for this trick, as
opposed to, say, a (simpler) boolean option when setting up the mainloop?
(The question may be stupid, sorry, this is my first foray in pulseaudio).

Thanks!

[1]
http://cgit.freedesktop.org/pulseaudio/pulseaudio/tree/src/pulse/stream.c#n1959

[2]
http://cgit.freedesktop.org/pulseaudio/pulseaudio/tree/src/pulse/stream.c?id=v3.99.2#n1793

[3]
http://cgit.freedesktop.org/pulseaudio/pulseaudio/tree/src/pulsecore/pdispatch.c?id=v3.99.2#n385
pa_gettimeofday

[4]
http://cgit.freedesktop.org/pulseaudio/pulseaudio/tree/src/pulsecore/core-rtclock.c?id=v3.99.2#n255

[5]
http://cgit.freedesktop.org/pulseaudio/pulseaudio/tree/src/pulse/context.c?id=v3.99.2#n152

[6]
http://cgit.freedesktop.org/pulseaudio/pulseaudio/commit/?id=f753ef2a23c0c42e5ad35a36327a9fda2e4f2d98
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/pulseaudio-discuss/attachments/20150518/cf40560e/attachment.html>


More information about the pulseaudio-discuss mailing list