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);
39 jack_options_t options,
40 jack_status_t *status, ...);
50 jack_client_t* jack_client_new_aux(
const char* client_name, jack_options_t options, jack_status_t* status)
53 jack_status_t my_status;
56 if (client_name == NULL) {
57 jack_error(
"jack_client_new called with a NULL client_name");
61 jack_log(
"jack_client_new %s", client_name);
65 *status = (jack_status_t)0;
68 if ((options & ~JackOpenOptions)) {
69 int my_status1 = *status | (JackFailure | JackInvalidOption);
70 *status = (jack_status_t)my_status1;
75 jack_varargs_init(&va);
77 if (!JackServerGlobals::Init()) {
78 int my_status1 = (JackFailure | JackServerError);
79 *status = (jack_status_t)my_status1;
89 int res = client->Open(va.server_name, client_name, va.session_id, options, status);
92 JackServerGlobals::Destroy();
93 int my_status1 = (JackFailure | JackServerError);
94 *status = (jack_status_t)my_status1;
97 return (jack_client_t*)client;
101 jack_client_t* jack_client_open_aux(
const char* client_name, jack_options_t options, jack_status_t* status, va_list ap)
104 jack_status_t my_status;
107 if (client_name == NULL) {
108 jack_error(
"jack_client_open called with a NULL client_name");
112 jack_log(
"jack_client_open %s", client_name);
116 *status = (jack_status_t)0;
119 if ((options & ~JackOpenOptions)) {
120 int my_status1 = *status | (JackFailure | JackInvalidOption);
121 *status = (jack_status_t)my_status1;
126 jack_varargs_parse(options, ap, &va);
128 if (!JackServerGlobals::Init()) {
129 int my_status1 = (JackFailure | JackServerError);
130 *status = (jack_status_t)my_status1;
140 int res = client->Open(va.server_name, client_name, va.session_id, options, status);
143 JackServerGlobals::Destroy();
144 int my_status1 = (JackFailure | JackServerError);
145 *status = (jack_status_t)my_status1;
148 return (jack_client_t*)client;
152 SERVER_EXPORT jack_client_t*
jack_client_open(
const char* ext_client_name, jack_options_t options, jack_status_t* status, ...)
154 JackGlobals::CheckContext(
"jack_client_open");
157 assert(JackGlobals::fOpenMutex);
158 JackGlobals::fOpenMutex->Lock();
160 va_start(ap, status);
161 jack_client_t* res = jack_client_open_aux(ext_client_name, options, status, ap);
163 JackGlobals::fOpenMutex->Unlock();
165 }
catch (std::bad_alloc& e) {
176 JackGlobals::CheckContext(
"jack_client_close");
178 assert(JackGlobals::fOpenMutex);
179 JackGlobals::fOpenMutex->Lock();
183 if (client == NULL) {
184 jack_error(
"jack_client_close called with a NULL client");
186 res = client->Close();
188 JackServerGlobals::Destroy();
189 jack_log(
"jack_client_close res = %d", res);
191 JackGlobals::fOpenMutex->Unlock();
197 return (JackServerGlobals::fInstance != NULL)
198 ? JackServerGlobals::fInstance->GetEngine()->GetClientPID(name)
Internal clients in the server.
SERVER_EXPORT void jack_error(const char *fmt,...)
LIB_EXPORT jack_client_t * jack_client_open(const char *client_name, jack_options_t options, jack_status_t *status,...)
LIB_EXPORT int jack_get_client_pid(const char *name)
A "decorator" debug client to validate API use.
SERVER_EXPORT void jack_log(const char *fmt,...)
The base class for clients: share part of the implementation for JackInternalClient and JackLibClient...
LIB_EXPORT int jack_client_close(jack_client_t *client)