diff --git a/ChangeLog b/ChangeLog index cdf29544..d21d3caa 100644 --- a/ChangeLog +++ b/ChangeLog @@ -23,6 +23,7 @@ Fernando Lopez-Lezcano 2008-05-01 Stephane Letz * Fix JackMachClientChannel::InternalClientLoad. + * Correct internal client loading. 2008-04-30 Stephane Letz diff --git a/common/JackInternalClient.cpp b/common/JackInternalClient.cpp index a35a5976..c8896f23 100644 --- a/common/JackInternalClient.cpp +++ b/common/JackInternalClient.cpp @@ -163,9 +163,15 @@ JackLoadableInternalClient::~JackLoadableInternalClient() int JackLoadableInternalClient::Open(const char* server_name, const char* name, jack_options_t options, jack_status_t* status) { - int res = JackInternalClient::Open(server_name, name, options, status); - if (res == 0) - fInitialize((jack_client_t*)this, fObjectData); + int res = -1; + if (JackInternalClient::Open(server_name, name, options, status) == 0) { + if (fInitialize((jack_client_t*)this, fObjectData) == 0) { + res = 0; + } else { + JackInternalClient::Close(); + fFinish = NULL; + } + } return res; } diff --git a/common/JackServer.cpp b/common/JackServer.cpp index 533dbac3..65c217a5 100644 --- a/common/JackServer.cpp +++ b/common/JackServer.cpp @@ -153,9 +153,10 @@ int JackServer::InternalClientLoad(const char* client_name, const char* so_name, *status = 0; JackLoadableInternalClient* client = new JackLoadableInternalClient(fInstance, GetSynchroTable(), so_name, objet_data); assert(client); - int res = client->Open("unused", client_name, (jack_options_t)options, (jack_status_t*)status); - if (res < 0) { + if (client->Open("unused", client_name, (jack_options_t)options, (jack_status_t*)status) < 0) { delete client; + int my_status1 = *status | JackFailure; + *status = (jack_status_t)my_status1; *int_ref = 0; } else { *int_ref = client->GetClientControl()->fRefNum; @@ -165,7 +166,6 @@ int JackServer::InternalClientLoad(const char* client_name, const char* so_name, *status = (jack_status_t)my_status1; *int_ref = 0; } - return 0; }