summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
Diffstat (limited to 'libs')
-rw-r--r--libs/ardour/ardour/audioengine.h4
-rw-r--r--libs/ardour/audioengine.cc16
2 files changed, 9 insertions, 11 deletions
diff --git a/libs/ardour/ardour/audioengine.h b/libs/ardour/ardour/audioengine.h
index 1bf4be3243..ddffd1d5c0 100644
--- a/libs/ardour/ardour/audioengine.h
+++ b/libs/ardour/ardour/audioengine.h
@@ -229,6 +229,7 @@ public:
std::string _latency_output_name;
framecnt_t _latency_signal_latency;
bool _started_for_latency;
+ bool _in_destructor;
void meter_thread ();
void start_metering_thread ();
@@ -236,9 +237,6 @@ public:
static gint m_meter_exit;
- void parameter_changed (const std::string&);
- PBD::ScopedConnection config_connection;
-
typedef std::map<std::string,AudioBackendInfo*> BackendMap;
BackendMap _backends;
AudioBackendInfo* backend_discover (const std::string&);
diff --git a/libs/ardour/audioengine.cc b/libs/ardour/audioengine.cc
index 631a861741..f6694d88ea 100644
--- a/libs/ardour/audioengine.cc
+++ b/libs/ardour/audioengine.cc
@@ -81,6 +81,7 @@ AudioEngine::AudioEngine ()
, _latency_flush_frames (0)
, _latency_signal_latency (0)
, _started_for_latency (false)
+ , _in_destructor (false)
{
g_atomic_int_set (&m_meter_exit, 0);
discover_backends ();
@@ -88,15 +89,9 @@ AudioEngine::AudioEngine ()
AudioEngine::~AudioEngine ()
{
+ _in_destructor = true;
+ stop_metering_thread ();
drop_backend ();
-
- config_connection.disconnect ();
-
- {
- Glib::Threads::Mutex::Lock tm (_process_lock);
- session_removed.signal ();
- stop_metering_thread ();
- }
}
AudioEngine*
@@ -1000,6 +995,11 @@ AudioEngine::update_latencies ()
void
AudioEngine::halted_callback (const char* why)
{
+ if (_in_destructor) {
+ /* everything is under control */
+ return;
+ }
+
stop_metering_thread ();
_running = false;