fix up meter thread management when JACK client starts/stops/is halted ; put focus...
[ardour.git] / libs / ardour / audioengine.cc
index dfa456cdcc5f913aac2cbd6ccae53561748a7ff1..d057a31cea2287d27fdc92eccb9bd8ccd74f0309 100644 (file)
@@ -77,9 +77,6 @@ AudioEngine::AudioEngine (string client_name)
        if (connect_to_jack (client_name)) {
                throw NoBackendAvailable ();
        }
-
-       start_metering_thread();
-
 }
 
 AudioEngine::~AudioEngine ()
@@ -157,6 +154,8 @@ AudioEngine::start ()
                } else {
                        // error << _("cannot activate JACK client") << endmsg;
                }
+
+               start_metering_thread();
        }
 
        return _running ? 0 : -1;
@@ -167,11 +166,11 @@ AudioEngine::stop (bool forever)
 {
        if (_running) {
                _running = false;
+               stop_metering_thread ();
                if (forever) {
                        jack_client_t* foo = _jack;
                        _jack = 0;
                        jack_client_close (foo);
-                       stop_metering_thread ();
                } else {
                        jack_deactivate (_jack);
                }
@@ -421,8 +420,9 @@ void
 AudioEngine::start_metering_thread ()
 {
        if (m_meter_thread == 0) {
+               g_atomic_int_set (&m_meter_exit, 0);
                m_meter_thread = Glib::Thread::create (sigc::mem_fun(this, &AudioEngine::meter_thread),
-                               500000, true, true, Glib::THREAD_PRIORITY_NORMAL);
+                                                      500000, true, true, Glib::THREAD_PRIORITY_NORMAL);
        }
 }
 
@@ -801,6 +801,8 @@ AudioEngine::halted (void *arg)
        AudioEngine* ae = static_cast<AudioEngine *> (arg);
        bool was_running = ae->_running;
 
+       ae->stop_metering_thread ();
+
        ae->_running = false;
        ae->_buffer_size = 0;
        ae->_frame_rate = 0;
@@ -1110,6 +1112,7 @@ AudioEngine::disconnect_from_jack ()
        _frame_rate = 0;
 
        if (_running) {
+               stop_metering_thread ();
                _running = false;
                Stopped(); /* EMIT SIGNAL */
        }
@@ -1214,6 +1217,8 @@ AudioEngine::reconnect_to_jack ()
 
        Running (); /* EMIT SIGNAL*/
 
+       start_metering_thread ();
+
        return 0;
 }