diff --git a/libs/ardour/ardour/port_engine_shared.h b/libs/ardour/ardour/port_engine_shared.h index c8313fa2b9..adef59cca6 100644 --- a/libs/ardour/ardour/port_engine_shared.h +++ b/libs/ardour/ardour/port_engine_shared.h @@ -27,7 +27,6 @@ #include #include - #include "pbd/natsort.h" #include "pbd/rcu.h" @@ -203,6 +202,8 @@ protected: pthread_mutex_unlock (&_port_callback_mutex); } + void process_connection_queue_locked (PortManager& mgr); + void port_connect_add_remove_callback () { _port_change_flag.store (1); } diff --git a/libs/ardour/port_engine_shared.cc b/libs/ardour/port_engine_shared.cc index 610c0e08b5..8eedac42c2 100644 --- a/libs/ardour/port_engine_shared.cc +++ b/libs/ardour/port_engine_shared.cc @@ -23,6 +23,7 @@ #include "pbd/error.h" #include "ardour/port_engine_shared.h" +#include "ardour/port_manager.h" #include "pbd/i18n.h" @@ -828,6 +829,16 @@ PortEngineSharedImpl::update_system_port_latencies () } } +void +PortEngineSharedImpl::process_connection_queue_locked (PortManager& mgr) +{ + for (auto& c : _port_connection_queue) { + mgr.connect_callback (c->a, c->b, c->c); + delete c; + } + _port_connection_queue.clear (); +} + #ifndef NDEBUG void PortEngineSharedImpl::list_ports () const diff --git a/libs/backends/alsa/alsa_audiobackend.cc b/libs/backends/alsa/alsa_audiobackend.cc index 534bdca700..f3a09c1f04 100644 --- a/libs/backends/alsa/alsa_audiobackend.cc +++ b/libs/backends/alsa/alsa_audiobackend.cc @@ -2092,12 +2092,7 @@ AlsaAudioBackend::main_process_thread () if (!_port_connection_queue.empty ()) { connections_changed = true; } - while (!_port_connection_queue.empty ()) { - PortConnectData* c = _port_connection_queue.back (); - manager.connect_callback (c->a, c->b, c->c); - _port_connection_queue.pop_back (); - delete c; - } + process_connection_queue_locked (manager); pthread_mutex_unlock (&_port_callback_mutex); } if (ports_changed) { diff --git a/libs/backends/coreaudio/coreaudio_backend.cc b/libs/backends/coreaudio/coreaudio_backend.cc index 5ceefae111..565e288d1c 100644 --- a/libs/backends/coreaudio/coreaudio_backend.cc +++ b/libs/backends/coreaudio/coreaudio_backend.cc @@ -1282,12 +1282,7 @@ CoreAudioBackend::pre_process () if (!_port_connection_queue.empty ()) { connections_changed = true; } - while (!_port_connection_queue.empty ()) { - PortConnectData *c = _port_connection_queue.back (); - manager.connect_callback (c->a, c->b, c->c); - _port_connection_queue.pop_back (); - delete c; - } + process_connection_queue_locked (manager); pthread_mutex_unlock (&_port_callback_mutex); } if (ports_changed) { diff --git a/libs/backends/dummy/dummy_audiobackend.cc b/libs/backends/dummy/dummy_audiobackend.cc index 8f9d175eef..c30c7b84ec 100644 --- a/libs/backends/dummy/dummy_audiobackend.cc +++ b/libs/backends/dummy/dummy_audiobackend.cc @@ -1029,12 +1029,7 @@ DummyAudioBackend::main_process_thread () if (!_port_connection_queue.empty ()) { connections_changed = true; } - while (!_port_connection_queue.empty ()) { - PortConnectData *c = _port_connection_queue.back (); - manager.connect_callback (c->a, c->b, c->c); - _port_connection_queue.pop_back (); - delete c; - } + process_connection_queue_locked (manager); pthread_mutex_unlock (&_port_callback_mutex); } if (ports_changed) { diff --git a/libs/backends/portaudio/portaudio_backend.cc b/libs/backends/portaudio/portaudio_backend.cc index e6a823dd60..2f011697a5 100644 --- a/libs/backends/portaudio/portaudio_backend.cc +++ b/libs/backends/portaudio/portaudio_backend.cc @@ -1827,12 +1827,7 @@ PortAudioBackend::process_port_connection_changes () if (!_port_connection_queue.empty ()) { connections_changed = true; } - while (!_port_connection_queue.empty ()) { - PortConnectData *c = _port_connection_queue.back (); - manager.connect_callback (c->a, c->b, c->c); - _port_connection_queue.pop_back (); - delete c; - } + process_connection_queue_locked (manager); pthread_mutex_unlock (&_port_callback_mutex); } if (ports_changed) { diff --git a/libs/backends/pulseaudio/pulseaudio_backend.cc b/libs/backends/pulseaudio/pulseaudio_backend.cc index 2c2fac9adb..c7b732ffc2 100644 --- a/libs/backends/pulseaudio/pulseaudio_backend.cc +++ b/libs/backends/pulseaudio/pulseaudio_backend.cc @@ -1098,12 +1098,7 @@ PulseAudioBackend::main_process_thread () if (!_port_connection_queue.empty ()) { connections_changed = true; } - while (!_port_connection_queue.empty ()) { - PortConnectData* c = _port_connection_queue.back (); - manager.connect_callback (c->a, c->b, c->c); - _port_connection_queue.pop_back (); - delete c; - } + process_connection_queue_locked (manager); pthread_mutex_unlock (&_port_callback_mutex); } if (ports_changed) {