another (non critical) concurrency issue:
authorRobin Gareus <robin@gareus.org>
Tue, 3 May 2016 11:56:08 +0000 (13:56 +0200)
committerRobin Gareus <robin@gareus.org>
Tue, 3 May 2016 12:27:52 +0000 (14:27 +0200)
commit4c40fe8d042a7987ea17763210dbdad8de64fb2a
treec2437ff56ae9fbe8cacb4be1479a965a5d488a58
parent433f18049b08ebfd486fd33e5e7696b2ce5ac3fb
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)
libs/ardour/session.cc