use AudioEngine destructor to do necessary stuff when shutting it down, and remove...
authorPaul Davis <paul@linuxaudiosystems.com>
Tue, 8 Oct 2013 00:30:06 +0000 (20:30 -0400)
committerPaul Davis <paul@linuxaudiosystems.com>
Tue, 8 Oct 2013 00:30:06 +0000 (20:30 -0400)
libs/ardour/ardour/audioengine.h
libs/ardour/audioengine.cc

index 1bf4be3243b235e59dc80e4ff467c49ddcb6f3e5..ddffd1d5c0240341590c8363d9f6c0fff5b026eb 100644 (file)
@@ -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&);
index 631a861741336b50a2e340efcd4bfb351cfc9afa..f6694d88ea85ab24cba8a837a915a0a73c89a427 100644 (file)
@@ -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;