Merge branch 'master' into cairocanvas
[ardour.git] / libs / backends / jack / jack_connection.cc
index d5d25c747f2106c7b944f0f38808a50906dab73e..09e6c9d6e7c02d2a4ba5d7c20eac7c6a63339068 100644 (file)
@@ -36,6 +36,8 @@ using std::vector;
 using std::cerr;
 using std::endl;
 
+bool JackConnection::_in_control = false;
+
 static void jack_halted_callback (void* arg)
 {
        JackConnection* jc = static_cast<JackConnection*> (arg);
@@ -54,17 +56,9 @@ JackConnection::JackConnection (const std::string& arg1, const std::string& arg2
        , _client_name (arg1)
        , session_uuid (arg2)
 {
-       _in_control = !server_running();
-}
-
-JackConnection::~JackConnection ()
-{
-       close ();
-}
+       /* See if the server is already up 
+        */
 
-bool
-JackConnection::server_running ()
-{
         EnvironmentalProtectionAgency* global_epa = EnvironmentalProtectionAgency::get_global_epa ();
         boost::scoped_ptr<EnvironmentalProtectionAgency> current_epa;
 
@@ -83,10 +77,15 @@ JackConnection::server_running ()
 
        if (status == 0) {
                jack_client_close (c);
-               return true;
+               _in_control = false;
+       } else {
+               _in_control = true;
        }
+}
 
-       return false;
+JackConnection::~JackConnection ()
+{
+       close ();
 }
 
 int
@@ -106,19 +105,6 @@ JackConnection::open ()
                 global_epa->restore ();
         }
 
-       /* check to see if the server is already running so that we know if we
-        * are starting it.
-        */
-
-       jack_client_t* c = jack_client_open ("ardourprobe", JackNoStartServer, &status);
-
-       if (status == 0) {
-               _in_control = false;
-               jack_client_close (c);
-       } else {
-               _in_control = true;
-       }
-
        /* ensure that PATH or equivalent includes likely locations of the JACK
         * server, in case the user's default does not.
         */
@@ -157,7 +143,12 @@ JackConnection::close ()
        if (_priv_jack) {       
                int ret = jack_client_close (_priv_jack);
                _jack = 0;
+
+               /* If we started JACK, it will be closing down */
+               usleep (500000);
+
                Disconnected (""); /* EMIT SIGNAL */
+
                return ret;
        }