21 #include "JackSystemDeps.h"
22 #include "JackGraphManager.h"
23 #include "JackInternalClient.h"
24 #include "JackServer.h"
25 #include "JackDebugClient.h"
26 #include "JackServerGlobals.h"
27 #include "JackTools.h"
28 #include "JackCompilerDeps.h"
29 #include "JackLockedEngine.h"
36 jack_client_t* jack_client_new_aux(
const char* client_name, jack_options_t options, jack_status_t* status);
38 SERVER_EXPORT jack_client_t * jack_client_open (
const char *client_name,
39 jack_options_t options,
40 jack_status_t *status, ...);
41 SERVER_EXPORT
int jack_client_close (jack_client_t *client);
42 SERVER_EXPORT
int jack_get_client_pid (
const char *name);
50 static jack_client_t * jack_client_open_aux (
const char *client_name,
51 jack_options_t options,
52 jack_status_t *status, va_list ap);
54 jack_client_t* jack_client_new_aux(
const char* client_name, jack_options_t options, jack_status_t* status)
57 jack_status_t my_status;
60 if (client_name == NULL) {
61 jack_error(
"jack_client_new called with a NULL client_name");
65 jack_log(
"jack_client_new %s", client_name);
69 *status = (jack_status_t)0;
72 if ((options & ~JackOpenOptions)) {
73 int my_status1 = *status | (JackFailure | JackInvalidOption);
74 *status = (jack_status_t)my_status1;
79 jack_varargs_init(&va);
81 if (!JackServerGlobals::Init()) {
82 int my_status1 = (JackFailure | JackServerError);
83 *status = (jack_status_t)my_status1;
93 int res = client->Open(va.server_name, client_name, va.session_id, options, status);
96 JackServerGlobals::Destroy();
97 int my_status1 = (JackFailure | JackServerError);
98 *status = (jack_status_t)my_status1;
101 return (jack_client_t*)client;
105 jack_client_t* jack_client_open_aux(
const char* client_name, jack_options_t options, jack_status_t* status, va_list ap)
108 jack_status_t my_status;
111 if (client_name == NULL) {
112 jack_error(
"jack_client_open called with a NULL client_name");
116 jack_log(
"jack_client_open %s", client_name);
120 *status = (jack_status_t)0;
123 if ((options & ~JackOpenOptions)) {
124 int my_status1 = *status | (JackFailure | JackInvalidOption);
125 *status = (jack_status_t)my_status1;
130 jack_varargs_parse(options, ap, &va);
132 if (!JackServerGlobals::Init()) {
133 int my_status1 = (JackFailure | JackServerError);
134 *status = (jack_status_t)my_status1;
144 int res = client->Open(va.server_name, client_name, va.session_id, options, status);
147 JackServerGlobals::Destroy();
148 int my_status1 = (JackFailure | JackServerError);
149 *status = (jack_status_t)my_status1;
152 return (jack_client_t*)client;
156 SERVER_EXPORT jack_client_t* jack_client_open(
const char* ext_client_name, jack_options_t options, jack_status_t* status, ...)
158 #ifdef __CLIENTDEBUG__
159 JackGlobals::CheckContext(
"jack_client_open");
162 assert(JackGlobals::fOpenMutex);
163 JackGlobals::fOpenMutex->Lock();
165 va_start(ap, status);
166 jack_client_t* res = jack_client_open_aux(ext_client_name, options, status, ap);
168 JackGlobals::fOpenMutex->Unlock();
170 }
catch(std::bad_alloc& e) {
179 SERVER_EXPORT
int jack_client_close(jack_client_t* ext_client)
181 #ifdef __CLIENTDEBUG__
182 JackGlobals::CheckContext(
"jack_client_close");
184 assert(JackGlobals::fOpenMutex);
185 JackGlobals::fOpenMutex->Lock();
189 if (client == NULL) {
190 jack_error(
"jack_client_close called with a NULL client");
192 res = client->Close();
194 JackServerGlobals::Destroy();
195 jack_log(
"jack_client_close res = %d", res);
197 JackGlobals::fOpenMutex->Unlock();
201 SERVER_EXPORT
int jack_get_client_pid(
const char *name)
203 return (JackServerGlobals::fInstance != NULL)
204 ? JackServerGlobals::fInstance->GetEngine()->GetClientPID(name)