ee8e8da614829724caf78d04b2e95e8d9cd6800f
This works around a race-condition, calling d'tors from two threads concurrently. The GUI thread destroys ctrl surfaces. ~~MIDIControllable() calls ::drop_external_control() -> ::midi_forget() This unsubscribes from signals (notably MIDI::Parser events) by calling ScopedConnection::disconnect(), Connection::disconnect(). At the same time auto_connect_thread can call PortManager::clear_pending_port_deletions() which removes the MIDI port and destorys the MIDI::Parser. ~Parser() calls Connection::signal_going_away() to invalidate connected signals. This can deadlock if it is called concurrently with Connection::disconnect() on the same signal. see also https://discourse.ardour.org/t/ardour-session-close-hangs/106523/10
Please see the Ardour web site at https://ardour.org/ for all documentation..
For information on building ardour:
https://ardour.org/development.html
Description
Languages
C++
56.5%
C
39.6%
JavaScript
1.3%
Lua
0.9%
Python
0.6%
Other
0.9%