don't ping JACK server 4 times to see if it is already up when ardour starts

This commit is contained in:
Paul Davis 2013-09-25 22:56:28 -04:00
parent d6274d5c3e
commit c736d88a5f
4 changed files with 18 additions and 31 deletions

View file

@ -63,7 +63,7 @@ deinstantiate ()
static bool static bool
already_configured () already_configured ()
{ {
return JackConnection::server_running (); return !JackConnection::in_control ();
} }
static ARDOUR::AudioBackendInfo _descriptor = { static ARDOUR::AudioBackendInfo _descriptor = {

View file

@ -513,7 +513,10 @@ JACKAudioBackend::start ()
{ {
if (!available()) { if (!available()) {
if (!_jack_connection->server_running()) { if (_jack_connection->in_control()) {
/* we will be starting JACK, so set up the
command that JACK will use when it (auto-)starts
*/
setup_jack_startup_command (); setup_jack_startup_command ();
} }

View file

@ -36,6 +36,8 @@ using std::vector;
using std::cerr; using std::cerr;
using std::endl; using std::endl;
bool JackConnection::_in_control = false;
static void jack_halted_callback (void* arg) static void jack_halted_callback (void* arg)
{ {
JackConnection* jc = static_cast<JackConnection*> (arg); JackConnection* jc = static_cast<JackConnection*> (arg);
@ -54,17 +56,9 @@ JackConnection::JackConnection (const std::string& arg1, const std::string& arg2
, _client_name (arg1) , _client_name (arg1)
, session_uuid (arg2) , session_uuid (arg2)
{ {
_in_control = !server_running(); /* See if the server is already up
} */
JackConnection::~JackConnection ()
{
close ();
}
bool
JackConnection::server_running ()
{
EnvironmentalProtectionAgency* global_epa = EnvironmentalProtectionAgency::get_global_epa (); EnvironmentalProtectionAgency* global_epa = EnvironmentalProtectionAgency::get_global_epa ();
boost::scoped_ptr<EnvironmentalProtectionAgency> current_epa; boost::scoped_ptr<EnvironmentalProtectionAgency> current_epa;
@ -83,10 +77,15 @@ JackConnection::server_running ()
if (status == 0) { if (status == 0) {
jack_client_close (c); jack_client_close (c);
return true; _in_control = false;
} else {
_in_control = true;
} }
}
return false; JackConnection::~JackConnection ()
{
close ();
} }
int int
@ -106,19 +105,6 @@ JackConnection::open ()
global_epa->restore (); 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 /* ensure that PATH or equivalent includes likely locations of the JACK
* server, in case the user's default does not. * server, in case the user's default does not.
*/ */

View file

@ -27,15 +27,13 @@ class JackConnection {
void halted_callback (); void halted_callback ();
void halted_info_callback (jack_status_t, const char*); void halted_info_callback (jack_status_t, const char*);
bool in_control() const { return _in_control; } static bool in_control() { return _in_control; }
static bool server_running();
private: private:
jack_client_t* volatile _jack; jack_client_t* volatile _jack;
std::string _client_name; std::string _client_name;
std::string session_uuid; std::string session_uuid;
bool _in_control; static bool _in_control;
}; };
} // namespace } // namespace