another (non critical) concurrency issue:
Ignore latency-updates while removing tracks. remove_tracks() calls disconnect_all() which can trigger the backend to perform a latency-recompute in a different thread (process thread). That calls Session::update_latency() which iterates over all routes including the one(s) to be deleted. At the same time disconnect_all() may propagate Port::PostDisconnect() leading to a lock contention. (no crash just a lot of unnecessary work. remove_routes() calls update_latency_compensation() which triggers a recompute if needed)
This commit is contained in:
parent
433f18049b
commit
4c40fe8d04
@ -6403,9 +6403,10 @@ Session::unknown_processors () const
|
||||
void
|
||||
Session::update_latency (bool playback)
|
||||
{
|
||||
|
||||
DEBUG_TRACE (DEBUG::Latency, string_compose ("JACK latency callback: %1\n", (playback ? "PLAYBACK" : "CAPTURE")));
|
||||
|
||||
if ((_state_of_the_state & (InitialConnecting|Deletion)) || _adding_routes_in_progress) {
|
||||
if ((_state_of_the_state & (InitialConnecting|Deletion)) || _adding_routes_in_progress || _route_deletion_in_progress) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user