13
0
livetrax/libs/backends
Robin Gareus 634d325e5d
Prevent deadlock when disconnecting
The backend holds `_port_callback_mutex` while disconnecting ports.
In some cases disconnecting a port can drop the last reference
resulting in a port-deletion from the connection handler.
This in turn will eventually aquire the `_port_callback_mutex`
and deadlock.

This is now circumvented by using atomic operations instead of
taking a lock to set the `_port_change_flag`.

The flag is also used to trigger a latency update in some cases,
atomic is preferable to taking a lock to set this flag.

--

Full bt: https://paste.debian.net/1184056/
Short:

#1  in pthread_mutex_lock ()
#2  in ARDOUR::PortEngineSharedImpl::port_connect_add_remove_callback()
#3  in ARDOUR::BackendPort::~BackendPort()
#4  in ARDOUR::DummyPort::~DummyPort()
#6  in ARDOUR::DummyAudioPort::~DummyAudioPort()
#7  in boost::checked_delete<ARDOUR::BackendPort>(ARDOUR::BackendPort*)
#12 in boost::shared_ptr<ARDOUR::ProtoPort>::reset()
#13 in ARDOUR::Port::drop()
#14 in ARDOUR::Port::~Port()
#15 in ARDOUR::AudioPort::~AudioPort()
#17 in ARDOUR::AudioEngine::add_pending_port_deletion(ARDOUR::Port*)
#20 in boost::detail::sp_counted_base::release()
#37 in ARDOUR::PortManager::connect_callback() at libs/ardour/port_manager.cc:788
#38 in ARDOUR::DummyAudioBackend::main_process_thread() at libs/backends/dummy/dummy_audiobackend.cc:1018
2021-02-04 21:06:20 +01:00
..
alsa Prevent deadlock when disconnecting 2021-02-04 21:06:20 +01:00
coreaudio Prevent deadlock when disconnecting 2021-02-04 21:06:20 +01:00
dummy Prevent deadlock when disconnecting 2021-02-04 21:06:20 +01:00
jack JACK latency compensation for newly created tracks #8472 2021-01-14 03:22:25 +01:00
MSVCbackends In an MSVC build, modify our VC project to use weak Jack 2020-10-31 07:59:09 +00:00
portaudio Prevent deadlock when disconnecting 2021-02-04 21:06:20 +01:00
pulseaudio Prevent deadlock when disconnecting 2021-02-04 21:06:20 +01:00
wscript NOOP, remove trailing whitespace, replace tabs in python scripts 2015-11-29 17:54:31 +01:00