Merge branch 'master' into cairocanvas
[ardour.git] / libs / backends / jack / jack_connection.cc
index da0127c5840c55cb3be8a7c96b622606d14b39a2..09e6c9d6e7c02d2a4ba5d7c20eac7c6a63339068 100644 (file)
@@ -16,6 +16,7 @@
     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
 */
+#include <iostream>
 
 #include <boost/scoped_ptr.hpp>
 #include <jack/session.h>
@@ -32,6 +33,10 @@ using namespace ARDOUR;
 using namespace PBD;
 using std::string;
 using std::vector;
+using std::cerr;
+using std::endl;
+
+bool JackConnection::_in_control = false;
 
 static void jack_halted_callback (void* arg)
 {
@@ -51,16 +56,9 @@ JackConnection::JackConnection (const std::string& arg1, const std::string& arg2
        , _client_name (arg1)
        , session_uuid (arg2)
 {
-}
-
-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;
 
@@ -79,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
@@ -137,10 +140,15 @@ JackConnection::close ()
 {
        GET_PRIVATE_JACK_POINTER_RET (_jack, -1);
 
-       if (_priv_jack) {
+       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;
        }
 
@@ -151,6 +159,7 @@ void
 JackConnection::halted_callback ()
 {
        _jack = 0;
+       std::cerr << "JACK HALTED\n";
        Disconnected ("");
 }
 
@@ -158,6 +167,7 @@ void
 JackConnection::halted_info_callback (jack_status_t /*status*/, const char* reason)
 {
        _jack = 0;
+       std::cerr << "JACK HALTED: " << reason << std::endl;
        Disconnected (reason);
 }