[pulseaudio-discuss] Loopback patches

Tanu Kaskinen tanuk at iki.fi
Tue Jan 3 18:12:47 UTC 2017


On Tue, 2017-01-03 at 15:44 +0100, Georg Chini wrote:
> Hi Tanu,
> 
> finally I am finding the time and motivation to continue on the loopback 
> patches.

Great!

> Sorry for the long delay, I hope you still remember some of it. I have a few
> questions regarding the thread separation. You write (20.7.2016):
> 
> "I'd be happy if you could somehow clearly divide the variables in
> userdata based on from which context they're supposed to be accessed.
> For example, pa_sink has field "thread_info", which is an embedded
> struct that holds the sink's IO thread variables, and there are other
> similar uses of a "thread_info" struct elsewhere. You could add
> "sink_thread_info" and "source_thread_info" to the userdata struct."
> 
> On the other hand, looking through your comments you only complain
> about variables belonging to the main thread which are (wrongly) accessed
> from an IO thread:
> 
> 1) source_sink_changed -> only set in main thread and detach() callback, 
> so OK,
> no change needed.
> 
> 2) iteration_counter -> only set in main thread, in detach() callback 
> and in conjunction
> with the two calls of update_minimum_latency(). Will be corrected with 
> the changes
> necessary for update_minimum_latency()
> 
> 3) latency_error -> like source_sink_changed
> 
> 4) extra_latency -> like iteration_counter
> 
> 5) underrun_counter -> like iteration_counter plus one additional 
> asynchronous message
> in sink_input_process_msg_cb(). An asynchronous update is OK, so no need 
> to have a
> underrun_counter_in_thread variable.
> 
> 6) underrun_occurred -> This flag is used as a message between the 
> threads, the
> output thread sets it when an underrun occurs and it is reset by the 
> main thread.
> So I think the usage is OK in this case.

If you send a message when underrun_counter changes, doesn't that also
imply that an underrun occurred, so a separate flag isn't needed?

> 6) minimum_latency -> will be corrected with the changes for 
> update_minimum_latency()
> 
> There are also two functions, which are currently accessed from multiple 
> threads:
> 
> 1) memblockq_adjust() which should only be used from the output thread. 
> No problem,
> can be corrected by using a synchronous message.
> 
> 2) update_minimum_latency() which should only be used from the main 
> thread. Will be
> corrected by sending asynchronous messages to the main thread. The use of a
> minimum_latency_in_thread variable is not necessary I think, because it 
> does not hurt
> if the IO threads gets the information only after the message has been 
> processed by
> the main thread.
> 
> Is my assessment correct and does the division you are asking for really 
> make sense
> under these circumstances?

It seems correct, and if dividing the variables doesn't seem useful to
you, feel free to not do that.

-- 
Tanu

https://www.patreon.com/tanuk


More information about the pulseaudio-discuss mailing list