summaryrefslogtreecommitdiff
path: root/jackd/clientengine.c
diff options
context:
space:
mode:
Diffstat (limited to 'jackd/clientengine.c')
-rw-r--r--jackd/clientengine.c519
1 files changed, 261 insertions, 258 deletions
diff --git a/jackd/clientengine.c b/jackd/clientengine.c
index b783bb6..365e287 100644
--- a/jackd/clientengine.c
+++ b/jackd/clientengine.c
@@ -4,7 +4,7 @@
*
* Copyright (C) 2001-2003 Paul Davis
* Copyright (C) 2004 Jack O'Quin
- *
+ *
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
@@ -55,7 +55,7 @@ jack_client_disconnect_ports (jack_engine_t *engine,
/* call tree **** MUST HOLD *** engine->client_lock */
for (node = client->ports; node; node = jack_slist_next (node)) {
- port = (jack_port_internal_t *) node->data;
+ port = (jack_port_internal_t*)node->data;
jack_port_clear_connections (engine, port);
jack_port_registration_notify (engine, port->shared->id, FALSE);
jack_port_release (engine, port);
@@ -67,26 +67,26 @@ jack_client_disconnect_ports (jack_engine_t *engine,
client->truefeeds = 0;
client->sortfeeds = 0;
client->ports = 0;
-}
+}
int
jack_client_do_deactivate (jack_engine_t *engine,
jack_client_internal_t *client, int sort_graph)
{
/* caller must hold engine->client_lock and must have checked for and/or
- * cleared all connections held by client.
+ * cleared all connections held by client.
*/
- VERBOSE(engine,"+++ deactivate %s", client->control->name);
+ VERBOSE (engine, "+++ deactivate %s", client->control->name);
client->control->active = FALSE;
jack_transport_client_exit (engine, client);
if (!jack_client_is_internal (client) &&
- engine->external_client_cnt > 0) {
+ engine->external_client_cnt > 0) {
engine->external_client_cnt--;
}
-
+
if (sort_graph) {
jack_sort_graph (engine);
}
@@ -98,21 +98,21 @@ jack_load_client (jack_engine_t *engine, jack_client_internal_t *client,
const char *so_name)
{
const char *errstr;
- char path_to_so[PATH_MAX+1];
+ char path_to_so[PATH_MAX + 1];
+
+ if (!so_name) {
+ return -1;
+ }
- if (!so_name) {
- return -1;
- }
+ if (so_name[0] == '/') {
+ /* Absolute, use as-is, user beware ... */
+ snprintf (path_to_so, sizeof(path_to_so), "%s.so", so_name);
+ } else {
+ snprintf (path_to_so, sizeof(path_to_so), ADDON_DIR "/%s.so", so_name);
+ }
- if (so_name[0] == '/') {
- /* Absolute, use as-is, user beware ... */
- snprintf (path_to_so, sizeof (path_to_so), "%s.so", so_name);
- } else {
- snprintf (path_to_so, sizeof (path_to_so), ADDON_DIR "/%s.so", so_name);
- }
+ client->handle = dlopen (path_to_so, RTLD_NOW | RTLD_GLOBAL);
- client->handle = dlopen (path_to_so, RTLD_NOW|RTLD_GLOBAL);
-
if (client->handle == 0) {
if ((errstr = dlerror ()) != 0) {
jack_error ("%s", errstr);
@@ -131,9 +131,9 @@ jack_load_client (jack_engine_t *engine, jack_client_internal_t *client,
return -1;
}
- client->finish = (void (*)(void *)) dlsym (client->handle,
- "jack_finish");
-
+ client->finish = (void (*)(void *))dlsym (client->handle,
+ "jack_finish");
+
if ((errstr = dlerror ()) != 0) {
jack_error ("%s has no finish() function", so_name);
dlclose (client->handle);
@@ -177,17 +177,17 @@ jack_remove_client (jack_engine_t *engine, jack_client_internal_t *client)
JSList *node;
jack_uuid_t finalizer = JACK_UUID_EMPTY_INITIALIZER;
- jack_uuid_clear (&finalizer);
+ jack_uuid_clear (&finalizer);
/* caller must write-hold the client lock */
VERBOSE (engine, "removing client \"%s\"", client->control->name);
- if (client->control->type == ClientInternal) {
- /* unload it while its still a regular client */
+ if (client->control->type == ClientInternal) {
+ /* unload it while its still a regular client */
jack_client_unload (client);
- }
+ }
/* if its not already a zombie, make it so */
@@ -199,11 +199,11 @@ jack_remove_client (jack_engine_t *engine, jack_client_internal_t *client)
engine->session_pending_replies -= 1;
if (engine->session_pending_replies == 0) {
- if (write (engine->session_reply_fd, &finalizer, sizeof (finalizer))
- < (ssize_t) sizeof (finalizer)) {
+ if (write (engine->session_reply_fd, &finalizer, sizeof(finalizer))
+ < (ssize_t)sizeof(finalizer)) {
jack_error ("cannot write SessionNotify result "
- "to client via fd = %d (%s)",
- engine->session_reply_fd, strerror (errno));
+ "to client via fd = %d (%s)",
+ engine->session_reply_fd, strerror (errno));
}
engine->session_reply_fd = -1;
}
@@ -212,56 +212,56 @@ jack_remove_client (jack_engine_t *engine, jack_client_internal_t *client)
if (client->control->type == ClientExternal) {
/* try to force the server thread to return from poll */
-
+
close (client->event_fd);
close (client->request_fd);
- }
+ }
- VERBOSE (engine, "before: client list contains %d", jack_slist_length (engine->clients));
+ VERBOSE (engine, "before: client list contains %d", jack_slist_length (engine->clients));
for (node = engine->clients; node; node = jack_slist_next (node)) {
- if (jack_uuid_compare (((jack_client_internal_t *) node->data)->control->uuid, client->control->uuid) == 0) {
+ if (jack_uuid_compare (((jack_client_internal_t*)node->data)->control->uuid, client->control->uuid) == 0) {
engine->clients = jack_slist_remove_link (engine->clients, node);
jack_slist_free_1 (node);
- VERBOSE (engine, "removed from client list, via matching UUID");
+ VERBOSE (engine, "removed from client list, via matching UUID");
break;
}
}
- VERBOSE (engine, "after: client list contains %d", jack_slist_length (engine->clients));
+ VERBOSE (engine, "after: client list contains %d", jack_slist_length (engine->clients));
jack_client_delete (engine, client);
if (engine->temporary) {
- int external_clients = 0;
-
- /* count external clients only when deciding whether to shutdown */
-
- for (node = engine->clients; node; node = jack_slist_next (node)) {
- jack_client_internal_t* client = (jack_client_internal_t*) node->data;
- if (client->control->type == ClientExternal) {
- external_clients++;
- }
- }
-
- if (external_clients == 0) {
- if (engine->wait_pid >= 0) {
- /* block new clients from being created
- after we release the lock.
- */
- engine->new_clients_allowed = 0;
- /* tell the waiter we're done
- to initiate a normal shutdown.
- */
- VERBOSE (engine, "Kill wait pid to stop");
- kill (engine->wait_pid, SIGUSR2);
- /* unlock the graph so that the server thread can finish */
- jack_unlock_graph (engine);
- sleep (-1);
- } else {
- exit (0);
- }
- }
+ int external_clients = 0;
+
+ /* count external clients only when deciding whether to shutdown */
+
+ for (node = engine->clients; node; node = jack_slist_next (node)) {
+ jack_client_internal_t* client = (jack_client_internal_t*)node->data;
+ if (client->control->type == ClientExternal) {
+ external_clients++;
+ }
+ }
+
+ if (external_clients == 0) {
+ if (engine->wait_pid >= 0) {
+ /* block new clients from being created
+ after we release the lock.
+ */
+ engine->new_clients_allowed = 0;
+ /* tell the waiter we're done
+ to initiate a normal shutdown.
+ */
+ VERBOSE (engine, "Kill wait pid to stop");
+ kill (engine->wait_pid, SIGUSR2);
+ /* unlock the graph so that the server thread can finish */
+ jack_unlock_graph (engine);
+ sleep (-1);
+ } else {
+ exit (0);
+ }
+ }
}
}
@@ -276,10 +276,10 @@ jack_check_clients (jack_engine_t* engine, int with_timeout_check)
for (node = engine->clients; node; node = jack_slist_next (node)) {
- client = (jack_client_internal_t *) node->data;
+ client = (jack_client_internal_t*)node->data;
if (client->error) {
- VERBOSE (engine, "client %s already marked with error = %d\n", client->control->name, client->error);
+ VERBOSE (engine, "client %s already marked with error = %d\n", client->control->name, client->error);
errs++;
continue;
}
@@ -291,15 +291,15 @@ jack_check_clients (jack_engine_t* engine, int with_timeout_check)
* scheduler screwed us up and never woke up the
* client in time. sigh.
*/
-
- VERBOSE (engine, "checking client %s: awake at %" PRIu64 " finished at %" PRIu64,
+
+ VERBOSE (engine, "checking client %s: awake at %" PRIu64 " finished at %" PRIu64,
client->control->name,
client->control->awake_at,
client->control->finished_at);
-
+
if (client->control->awake_at > 0) {
if (client->control->finished_at == 0) {
- jack_time_t now = jack_get_microseconds();
+ jack_time_t now = jack_get_microseconds ();
if ((now - client->control->awake_at) < engine->driver->period_usecs) {
/* we give the client a bit of time, to finish the cycle
@@ -308,7 +308,7 @@ jack_check_clients (jack_engine_t* engine, int with_timeout_check)
struct timespec wait_time;
wait_time.tv_sec = 0;
wait_time.tv_nsec = (engine->driver->period_usecs - (now - client->control->awake_at)) * 1000;
- VERBOSE (engine, "client %s seems to have timed out. we may have mercy of %d ns." , client->control->name, (int) wait_time.tv_nsec );
+ VERBOSE (engine, "client %s seems to have timed out. we may have mercy of %d ns.", client->control->name, (int)wait_time.tv_nsec );
nanosleep (&wait_time, NULL);
}
@@ -329,7 +329,7 @@ jack_check_clients (jack_engine_t* engine, int with_timeout_check)
}
}
}
-
+
if (errs) {
jack_engine_signal_problems (engine);
}
@@ -351,47 +351,47 @@ jack_remove_clients (jack_engine_t* engine, int* exit_freewheeling_when_done)
/* remove all dead clients */
for (node = engine->clients; node; ) {
-
+
tmp = jack_slist_next (node);
-
- client = (jack_client_internal_t *) node->data;
- VERBOSE(engine, "client %s error status %d", client->control->name, client->error);
-
+ client = (jack_client_internal_t*)node->data;
+
+ VERBOSE (engine, "client %s error status %d", client->control->name, client->error);
+
if (client->error) {
-
+
if (engine->freewheeling && jack_uuid_compare (client->control->uuid, engine->fwclient) == 0) {
VERBOSE (engine, "freewheeling client has errors");
*exit_freewheeling_when_done = 1;
}
-
+
/* if we have a communication problem with the
client, remove it. otherwise, turn it into
a zombie. the client will/should realize
this and will close its sockets. then
we'll end up back here again and will
finally remove the client.
- */
+ */
if (client->error >= JACK_ERROR_WITH_SOCKETS) {
VERBOSE (engine, "removing failed "
"client %s state = %s errors"
- " = %d",
+ " = %d",
client->control->name,
jack_client_state_name (client),
client->error);
jack_remove_client (engine,
- (jack_client_internal_t *)
+ (jack_client_internal_t*)
node->data);
} else {
VERBOSE (engine, "client failure: "
"client %s state = %s errors"
- " = %d",
+ " = %d",
client->control->name,
jack_client_state_name (client),
client->error);
if (!engine->nozombies) {
jack_zombify_client (engine,
- (jack_client_internal_t *)
+ (jack_client_internal_t*)
node->data);
client->error = 0;
}
@@ -399,14 +399,14 @@ jack_remove_clients (jack_engine_t* engine, int* exit_freewheeling_when_done)
need_sort = TRUE;
}
-
+
node = tmp;
}
if (need_sort) {
jack_sort_graph (engine);
}
-
+
jack_engine_reset_rolling_usecs (engine);
VERBOSE (engine, "-- Removing failed clients ...");
@@ -421,10 +421,10 @@ jack_client_by_name (jack_engine_t *engine, const char *name)
jack_rdlock_graph (engine);
for (node = engine->clients; node; node = jack_slist_next (node)) {
- if (strcmp ((const char *) ((jack_client_internal_t *)
- node->data)->control->name,
+ if (strcmp ((const char*)((jack_client_internal_t*)
+ node->data)->control->name,
name) == 0) {
- client = (jack_client_internal_t *) node->data;
+ client = (jack_client_internal_t*)node->data;
break;
}
}
@@ -437,26 +437,26 @@ static int
jack_client_id_by_name (jack_engine_t *engine, const char *name, jack_uuid_t id)
{
JSList *node;
- int ret = -1;
+ int ret = -1;
- jack_uuid_clear (&id);
+ jack_uuid_clear (&id);
jack_rdlock_graph (engine);
for (node = engine->clients; node; node = jack_slist_next (node)) {
- if (strcmp ((const char *) ((jack_client_internal_t *)
- node->data)->control->name,
+ if (strcmp ((const char*)((jack_client_internal_t*)
+ node->data)->control->name,
name) == 0) {
- jack_client_internal_t *client =
- (jack_client_internal_t *) node->data;
+ jack_client_internal_t *client =
+ (jack_client_internal_t*)node->data;
jack_uuid_copy (&id, client->control->uuid);
- ret = 0;
+ ret = 0;
break;
}
}
jack_unlock_graph (engine);
- return ret;
+ return ret;
}
jack_client_internal_t *
@@ -469,8 +469,8 @@ jack_client_internal_by_id (jack_engine_t *engine, jack_uuid_t id)
for (node = engine->clients; node; node = jack_slist_next (node)) {
- if (jack_uuid_compare (((jack_client_internal_t *) node->data)->control->uuid, id) == 0) {
- client = (jack_client_internal_t *) node->data;
+ if (jack_uuid_compare (((jack_client_internal_t*)node->data)->control->uuid, id) == 0) {
+ client = (jack_client_internal_t*)node->data;
break;
}
}
@@ -479,14 +479,15 @@ jack_client_internal_by_id (jack_engine_t *engine, jack_uuid_t id)
}
int
-jack_client_name_reserved( jack_engine_t *engine, const char *name )
+jack_client_name_reserved ( jack_engine_t *engine, const char *name )
{
JSList *node;
- for (node = engine->reserved_client_names; node; node = jack_slist_next (node)) {
- jack_reserved_name_t *reservation = (jack_reserved_name_t *) node->data;
+
+ for (node = engine->reserved_client_names; node; node = jack_slist_next (node)) {
+ jack_reserved_name_t *reservation = (jack_reserved_name_t*)node->data;
if (!strcmp (reservation->name, name)) {
return 1;
- }
+ }
}
return 0;
}
@@ -503,7 +504,7 @@ jack_generate_unique_name (jack_engine_t *engine, char *name)
if (length > JACK_CLIENT_NAME_SIZE - 4) {
jack_error ("%s exists and is too long to make unique", name);
- return 1; /* failure */
+ return 1; /* failure */
}
/* generate a unique name by appending "-01".."-99" */
@@ -513,7 +514,7 @@ jack_generate_unique_name (jack_engine_t *engine, char *name)
name[tens] = '0';
name[ones] = '1';
name[length] = '\0';
- while (jack_client_by_name (engine, name) || jack_client_name_reserved( engine, name )) {
+ while (jack_client_by_name (engine, name) || jack_client_name_reserved ( engine, name )) {
if (name[ones] == '9') {
if (name[tens] == '9') {
jack_error ("client %s has 99 extra"
@@ -541,7 +542,7 @@ jack_client_name_invalid (jack_engine_t *engine, char *name,
* startup. There are no other clients at that point, anyway.
*/
- if (jack_client_by_name (engine, name) || jack_client_name_reserved(engine, name )) {
+ if (jack_client_by_name (engine, name) || jack_client_name_reserved (engine, name )) {
*status |= JackNameNotUnique;
@@ -552,7 +553,7 @@ jack_client_name_invalid (jack_engine_t *engine, char *name,
return TRUE;
}
- if (jack_generate_unique_name(engine, name)) {
+ if (jack_generate_unique_name (engine, name)) {
*status |= JackFailure;
return TRUE;
}
@@ -568,8 +569,8 @@ jack_setup_client_control (jack_engine_t *engine, int fd, ClientType type, const
{
jack_client_internal_t *client;
- client = (jack_client_internal_t *)
- malloc (sizeof (jack_client_internal_t));
+ client = (jack_client_internal_t*)
+ malloc (sizeof(jack_client_internal_t));
client->request_fd = fd;
client->event_fd = -1;
@@ -584,19 +585,19 @@ jack_setup_client_control (jack_engine_t *engine, int fd, ClientType type, const
client->private_client = NULL;
if (type != ClientExternal) {
-
- client->control = (jack_client_control_t *)
- malloc (sizeof (jack_client_control_t));
+
+ client->control = (jack_client_control_t*)
+ malloc (sizeof(jack_client_control_t));
} else {
- if (jack_shmalloc (sizeof (jack_client_control_t),
+ if (jack_shmalloc (sizeof(jack_client_control_t),
&client->control_shm)) {
- jack_error ("cannot create client control block for %s",
+ jack_error ("cannot create client control block for %s",
name);
free (client);
- return 0;
- }
+ return 0;
+ }
if (jack_attach_shm (&client->control_shm)) {
jack_error ("cannot attach to client control block "
@@ -606,8 +607,8 @@ jack_setup_client_control (jack_engine_t *engine, int fd, ClientType type, const
return 0;
}
- client->control = (jack_client_control_t *)
- jack_shm_addr (&client->control_shm);
+ client->control = (jack_client_control_t*)
+ jack_shm_addr (&client->control_shm);
}
client->control->type = type;
@@ -615,13 +616,13 @@ jack_setup_client_control (jack_engine_t *engine, int fd, ClientType type, const
client->control->dead = FALSE;
client->control->timed_out = 0;
- if (jack_uuid_empty (uuid)) {
- client->control->uuid = jack_client_uuid_generate ();
- } else {
- jack_uuid_copy (&client->control->uuid, uuid);
- }
+ if (jack_uuid_empty (uuid)) {
+ client->control->uuid = jack_client_uuid_generate ();
+ } else {
+ jack_uuid_copy (&client->control->uuid, uuid);
+ }
- strcpy ((char *) client->control->name, name);
+ strcpy ((char*)client->control->name, name);
client->subgraph_start_fd = -1;
client->subgraph_wait_fd = -1;
@@ -642,33 +643,33 @@ jack_setup_client_control (jack_engine_t *engine, int fd, ClientType type, const
#if 0
if (type != ClientExternal) {
- client->process = NULL;
- client->process_arg = NULL;
- client->bufsize = NULL;
- client->bufsize_arg = NULL;
- client->srate = NULL;
- client->srate_arg = NULL;
- client->xrun = NULL;
- client->xrun_arg = NULL;
- client->port_register = NULL;
- client->port_register_arg = NULL;
- client->port_connect = NULL;
- client->port_connect_arg = NULL;
- client->graph_order = NULL;
- client->graph_order_arg = NULL;
- client->client_register = NULL;
- client->client_register_arg = NULL;
- client->thread_cb = NULL;
- client->thread_cb_arg = NULL;
+ client->process = NULL;
+ client->process_arg = NULL;
+ client->bufsize = NULL;
+ client->bufsize_arg = NULL;
+ client->srate = NULL;
+ client->srate_arg = NULL;
+ client->xrun = NULL;
+ client->xrun_arg = NULL;
+ client->port_register = NULL;
+ client->port_register_arg = NULL;
+ client->port_connect = NULL;
+ client->port_connect_arg = NULL;
+ client->graph_order = NULL;
+ client->graph_order_arg = NULL;
+ client->client_register = NULL;
+ client->client_register_arg = NULL;
+ client->thread_cb = NULL;
+ client->thread_cb_arg = NULL;
}
#endif
jack_transport_client_new (client);
-
+
#ifdef JACK_USE_MACH_THREADS
- /* specific resources for server/client real-time thread
+ /* specific resources for server/client real-time thread
* communication */
- allocate_mach_serverport(engine, client);
- client->running = FALSE;
+ allocate_mach_serverport (engine, client);
+ client->running = FALSE;
#endif
return client;
@@ -679,16 +680,16 @@ jack_ensure_uuid_unique (jack_engine_t *engine, jack_uuid_t uuid)
{
JSList *node;
- if (jack_uuid_empty (uuid)) {
- return;
- }
+ if (jack_uuid_empty (uuid)) {
+ return;
+ }
jack_lock_graph (engine);
- for (node=engine->clients; node; node=jack_slist_next (node)) {
- jack_client_internal_t *client = (jack_client_internal_t *) node->data;
+ for (node = engine->clients; node; node = jack_slist_next (node)) {
+ jack_client_internal_t *client = (jack_client_internal_t*)node->data;
if (jack_uuid_compare (client->control->uuid, uuid) == 0) {
jack_uuid_clear (&uuid);
- }
+ }
}
jack_unlock_graph (engine);
}
@@ -696,24 +697,25 @@ jack_ensure_uuid_unique (jack_engine_t *engine, jack_uuid_t uuid)
/* set up all types of clients */
static jack_client_internal_t *
setup_client (jack_engine_t *engine, ClientType type, char *name,
- jack_uuid_t uuid,
+ jack_uuid_t uuid,
jack_options_t options, jack_status_t *status, int client_fd,
const char *object_path, const char *object_data)
{
/* called with the request_lock */
jack_client_internal_t *client;
- char bufx[64];
+ char bufx[64];
/* validate client name, generate a unique one if appropriate */
- if (jack_client_name_invalid (engine, name, options, status))
+ if (jack_client_name_invalid (engine, name, options, status)) {
return NULL;
+ }
- jack_ensure_uuid_unique (engine, uuid);
+ jack_ensure_uuid_unique (engine, uuid);
/* create a client struct for this name */
if ((client = jack_setup_client_control (engine, client_fd,
type, name, uuid)) == NULL) {
- *status |= (JackFailure|JackInitFailure);
+ *status |= (JackFailure | JackInitFailure);
jack_error ("cannot create new client object");
return NULL;
}
@@ -724,22 +726,22 @@ setup_client (jack_engine_t *engine, ClientType type, char *name,
jack_error ("cannot dynamically load client from"
" \"%s\"", object_path);
jack_client_delete (engine, client);
- *status |= (JackFailure|JackLoadFailure);
+ *status |= (JackFailure | JackLoadFailure);
return NULL;
}
}
- jack_uuid_unparse (client->control->uuid, bufx);
-
- VERBOSE (engine, "new client: %s, uuid = %s"
- " type %d @ %p fd = %d",
+ jack_uuid_unparse (client->control->uuid, bufx);
+
+ VERBOSE (engine, "new client: %s, uuid = %s"
+ " type %d @ %p fd = %d",
client->control->name, bufx,
type, client->control, client_fd);
- if (jack_client_is_internal(client)) {
+ if (jack_client_is_internal (client)) {
- // XXX: do i need to lock the graph here ?
- // i moved this one up in the init process, lets see what happens.
+ // XXX: do i need to lock the graph here ?
+ // i moved this one up in the init process, lets see what happens.
/* Internal clients need to make regular JACK API
* calls, which need a jack_client_t structure.
@@ -758,10 +760,10 @@ setup_client (jack_engine_t *engine, ClientType type, char *name,
/* add new client to the clients list */
jack_lock_graph (engine);
- engine->clients = jack_slist_prepend (engine->clients, client);
+ engine->clients = jack_slist_prepend (engine->clients, client);
jack_engine_reset_rolling_usecs (engine);
-
- if (jack_client_is_internal(client)) {
+
+ if (jack_client_is_internal (client)) {
jack_unlock_graph (engine);
@@ -782,7 +784,7 @@ setup_client (jack_engine_t *engine, ClientType type, char *name,
jack_lock_graph (engine);
jack_remove_client (engine, client);
jack_unlock_graph (engine);
- *status |= (JackFailure|JackInitFailure);
+ *status |= (JackFailure | JackInitFailure);
client = NULL;
//JOQ: not clear that all allocated
//storage has been cleaned up properly.
@@ -790,11 +792,11 @@ setup_client (jack_engine_t *engine, ClientType type, char *name,
pthread_mutex_lock (&engine->request_lock);
}
- } else { /* external client */
+ } else { /* external client */
jack_unlock_graph (engine);
}
-
+
return client;
}
@@ -804,13 +806,13 @@ jack_create_driver_client (jack_engine_t *engine, char *name)
jack_client_connect_request_t req;
jack_status_t status;
jack_client_internal_t *client;
- jack_uuid_t empty_uuid = JACK_UUID_EMPTY_INITIALIZER;
+ jack_uuid_t empty_uuid = JACK_UUID_EMPTY_INITIALIZER;
- VALGRIND_MEMSET(&empty_uuid, 0, sizeof(empty_uuid));
+ VALGRIND_MEMSET (&empty_uuid, 0, sizeof(empty_uuid));
- snprintf (req.name, sizeof (req.name), "%s", name);
+ snprintf (req.name, sizeof(req.name), "%s", name);
- jack_uuid_clear (&empty_uuid);
+ jack_uuid_clear (&empty_uuid);
pthread_mutex_lock (&engine->request_lock);
client = setup_client (engine, ClientDriver, name, empty_uuid, JackUseExactName,
@@ -825,19 +827,19 @@ handle_unload_client (jack_engine_t *engine, jack_uuid_t id)
{
/* called *without* the request_lock */
jack_client_internal_t *client;
- jack_status_t status = (JackNoSuchClient|JackFailure);
+ jack_status_t status = (JackNoSuchClient | JackFailure);
jack_lock_graph (engine);
if ((client = jack_client_internal_by_id (engine, id))) {
VERBOSE (engine, "unloading client \"%s\"",
client->control->name);
- if (client->control->type != ClientInternal) {
- status = JackFailure|JackInvalidOption;
- } else {
- jack_remove_client (engine, client);
- status = 0;
- }
+ if (client->control->type != ClientInternal) {
+ status = JackFailure | JackInvalidOption;
+ } else {
+ jack_remove_client (engine, client);
+ status = 0;
+ }
}
jack_unlock_graph (engine);
@@ -849,12 +851,13 @@ static char *
jack_get_reserved_name (jack_engine_t *engine, jack_uuid_t uuid)
{
JSList *node;
- for (node = engine->reserved_client_names; node; node = jack_slist_next (node)) {
- jack_reserved_name_t *reservation = (jack_reserved_name_t *) node->data;
+
+ for (node = engine->reserved_client_names; node; node = jack_slist_next (node)) {
+ jack_reserved_name_t *reservation = (jack_reserved_name_t*)node->data;
if (jack_uuid_compare (reservation->uuid, uuid) != 0) {
char *retval = strdup (reservation->name);
free (reservation);
- engine->reserved_client_names =
+ engine->reserved_client_names =
jack_slist_remove (engine->reserved_client_names, reservation);
return retval;
}
@@ -872,43 +875,43 @@ jack_client_create (jack_engine_t *engine, int client_fd)
res.status = 0;
- VALGRIND_MEMSET(&res, 0, sizeof (res));
+ VALGRIND_MEMSET (&res, 0, sizeof(res));
+
+ nbytes = read (client_fd, &req, sizeof(req));
- nbytes = read (client_fd, &req, sizeof (req));
-
- if (nbytes == 0) { /* EOF? */
- jack_error ("cannot read connection request from client (%s)", strerror(errno));
- return -1;
- }
+ if (nbytes == 0) { /* EOF? */
+ jack_error ("cannot read connection request from client (%s)", strerror (errno));
+ return -1;
+ }
/* First verify protocol version (first field of request), if
- * present, then make sure request has the expected length. */
- if ((nbytes < sizeof (req.protocol_v))
+ * present, then make sure request has the expected length. */
+ if ((nbytes < sizeof(req.protocol_v))
|| (req.protocol_v != jack_protocol_version)
- || (nbytes != sizeof (req))) {
+ || (nbytes != sizeof(req))) {
/* JACK protocol incompatibility */
- res.status |= (JackFailure|JackVersionError);
+ res.status |= (JackFailure | JackVersionError);
jack_error ("JACK protocol mismatch (%d vs %d)", req.protocol_v, jack_protocol_version);
- if (write (client_fd, &res, sizeof (res)) != sizeof (res)) {
+ if (write (client_fd, &res, sizeof(res)) != sizeof(res)) {
jack_error ("cannot write client connection response");
}
return -1;
}
- if (!req.load) { /* internal client close? */
+ if (!req.load) { /* internal client close? */
int rc = -1;
jack_uuid_t id = JACK_UUID_EMPTY_INITIALIZER;
- if (jack_client_id_by_name(engine, req.name, id) == 0) {
+ if (jack_client_id_by_name (engine, req.name, id) == 0) {
rc = handle_unload_client (engine, id);
}
-
+
/* close does not send a reply */
return rc;
}
-
+
pthread_mutex_lock (&engine->request_lock);
if (!jack_uuid_empty (req.uuid)) {
char *res_name = jack_get_reserved_name (engine, req.uuid);
@@ -936,8 +939,8 @@ jack_client_create (jack_engine_t *engine, int client_fd)
/* Mach port number for server/client communication */
res.portnum = client->portnum;
#endif
-
- if (jack_client_is_internal(client)) {
+
+ if (jack_client_is_internal (client)) {
/* the ->control pointers are for an internal client
so we know they are the right sized pointers
for this server. however, to keep the result
@@ -945,14 +948,14 @@ jack_client_create (jack_engine_t *engine, int client_fd)
clients/servers, the result structure stores
them as 64 bit integer, so we have to do a slightly
forced cast here.
- */
- res.client_control = (uint64_t) ((intptr_t) client->control);
- res.engine_control = (uint64_t) ((intptr_t) engine->control);
+ */
+ res.client_control = (uint64_t)((intptr_t)client->control);
+ res.engine_control = (uint64_t)((intptr_t)engine->control);
} else {
strcpy (res.fifo_prefix, engine->fifo_prefix);
}
- if (write (client_fd, &res, sizeof (res)) != sizeof (res)) {
+ if (write (client_fd, &res, sizeof(res)) != sizeof(res)) {
jack_error ("cannot write connection response to client");
jack_lock_graph (engine);
client->control->dead = 1;
@@ -965,7 +968,7 @@ jack_client_create (jack_engine_t *engine, int client_fd)
close (client_fd);
}
- jack_client_registration_notify (engine, (const char*) client->control->name, 1);
+ jack_client_registration_notify (engine, (const char*)client->control->name, 1);
return 0;
}
@@ -979,15 +982,14 @@ jack_client_activate (jack_engine_t *engine, jack_uuid_t id)
int i;
jack_event_t event;
- VALGRIND_MEMSET(&event, 0, sizeof(event));
+ VALGRIND_MEMSET (&event, 0, sizeof(event));
jack_lock_graph (engine);
- if ((client = jack_client_internal_by_id (engine, id)))
- {
+ if ((client = jack_client_internal_by_id (engine, id))) {
client->control->active = TRUE;
- jack_transport_activate(engine, client);
+ jack_transport_activate (engine, client);
/* we call this to make sure the FIFO is
* built+ready by the time the client needs
@@ -996,7 +998,7 @@ jack_client_activate (jack_engine_t *engine, jack_uuid_t id)
*/
jack_get_fifo_fd (engine,
- ++engine->external_client_cnt);
+ ++engine->external_client_cnt);
jack_sort_graph (engine);
@@ -1007,12 +1009,12 @@ jack_client_activate (jack_engine_t *engine, jack_uuid_t id)
}
event.type = BufferSizeChange;
- event.x.n = engine->control->buffer_size;
+ event.x.n = engine->control->buffer_size;
jack_deliver_event (engine, client, &event);
// send delayed notifications for ports.
for (node = client->ports; node; node = jack_slist_next (node)) {
- jack_port_internal_t *port = (jack_port_internal_t *) node->data;
+ jack_port_internal_t *port = (jack_port_internal_t*)node->data;
jack_port_registration_notify (engine, port->shared->id, TRUE);
}
@@ -1022,7 +1024,7 @@ jack_client_activate (jack_engine_t *engine, jack_uuid_t id)
jack_unlock_graph (engine);
return ret;
-}
+}
int
jack_client_deactivate (jack_engine_t *engine, jack_uuid_t id)
@@ -1035,18 +1037,18 @@ jack_client_deactivate (jack_engine_t *engine, jack_uuid_t id)
for (node = engine->clients; node; node = jack_slist_next (node)) {
jack_client_internal_t *client =
- (jack_client_internal_t *) node->data;
-
+ (jack_client_internal_t*)node->data;
+
if (jack_uuid_compare (client->control->uuid, id) == 0) {
-
- JSList *portnode;
+
+ JSList *portnode;
jack_port_internal_t *port;
for (portnode = client->ports; portnode;
portnode = jack_slist_next (portnode)) {
- port = (jack_port_internal_t *) portnode->data;
+ port = (jack_port_internal_t*)portnode->data;
jack_port_clear_connections (engine, port);
- }
+ }
ret = jack_client_do_deactivate (engine, client, TRUE);
break;
@@ -1056,7 +1058,7 @@ jack_client_deactivate (jack_engine_t *engine, jack_uuid_t id)
jack_unlock_graph (engine);
return ret;
-}
+}
int
@@ -1067,20 +1069,20 @@ jack_mark_client_socket_error (jack_engine_t *engine, int fd)
jack_client_internal_t *client = 0;
JSList *node;
- for (node = engine->clients; node; node = jack_slist_next (node)) {
+ for (node = engine->clients; node; node = jack_slist_next (node)) {
- if (jack_client_is_internal((jack_client_internal_t *)
- node->data)) {
- continue;
- }
+ if (jack_client_is_internal ((jack_client_internal_t*)
+ node->data)) {
+ continue;
+ }
- if (((jack_client_internal_t *) node->data)->request_fd == fd) {
- client = (jack_client_internal_t *) node->data;
- break;
- }
- }
+ if (((jack_client_internal_t*)node->data)->request_fd == fd) {
+ client = (jack_client_internal_t*)node->data;
+ break;
+ }
+ }
- if (client) {
+ if (client) {
VERBOSE (engine, "marking client %s with SOCKET error state = "
"%s errors = %d", client->control->name,
jack_client_state_name (client),
@@ -1094,34 +1096,35 @@ jack_mark_client_socket_error (jack_engine_t *engine, int fd)
void
jack_client_delete (jack_engine_t *engine, jack_client_internal_t *client)
{
- jack_uuid_t uuid = JACK_UUID_EMPTY_INITIALIZER;
- jack_uuid_copy (&uuid, client->control->uuid);
+ jack_uuid_t uuid = JACK_UUID_EMPTY_INITIALIZER;
- jack_client_registration_notify (engine, (const char*) client->control->name, 0);
+ jack_uuid_copy (&uuid, client->control->uuid);
- jack_remove_properties (NULL, uuid);
- /* have to do the notification ourselves, since the client argument
- to jack_remove_properties() was NULL
- */
- jack_property_change_notify (engine, PropertyDeleted, uuid, NULL);
+ jack_client_registration_notify (engine, (const char*)client->control->name, 0);
+
+ jack_remove_properties (NULL, uuid);
+ /* have to do the notification ourselves, since the client argument
+ to jack_remove_properties() was NULL
+ */
+ jack_property_change_notify (engine, PropertyDeleted, uuid, NULL);
if (jack_client_is_internal (client)) {
free (client->private_client);
- free ((void *) client->control);
+ free ((void*)client->control);
- } else {
+ } else {
/* release the client segment, mark it for
destruction, and free up the shm registry
information so that it can be reused.
- */
+ */
jack_release_shm (&client->control_shm);
jack_destroy_shm (&client->control_shm);
- }
+ }
- free (client);
+ free (client);
}
@@ -1134,7 +1137,7 @@ jack_intclient_handle_request (jack_engine_t *engine, jack_request_t *req)
if ((client = jack_client_by_name (engine, req->x.intclient.name))) {
jack_uuid_copy (&req->x.intclient.uuid, client->control->uuid);
} else {
- req->status |= (JackNoSuchClient|JackFailure);
+ req->status |= (JackNoSuchClient | JackFailure);
}
}
@@ -1144,21 +1147,21 @@ jack_intclient_load_request (jack_engine_t *engine, jack_request_t *req)
/* called with the request_lock */
jack_client_internal_t *client;
jack_status_t status = 0;
- jack_uuid_t empty_uuid = JACK_UUID_EMPTY_INITIALIZER;
+ jack_uuid_t empty_uuid = JACK_UUID_EMPTY_INITIALIZER;
VERBOSE (engine, "load internal client %s from %s, init `%s', "
"options: 0x%x", req->x.intclient.name,
req->x.intclient.path, req->x.intclient.init,
req->x.intclient.options);
- jack_uuid_clear (&empty_uuid);
+ jack_uuid_clear (&empty_uuid);
client = setup_client (engine, ClientInternal, req->x.intclient.name, empty_uuid,
- req->x.intclient.options|JackUseExactName, &status, -1,
+ req->x.intclient.options | JackUseExactName, &status, -1,
req->x.intclient.path, req->x.intclient.init);
if (client == NULL) {
- status |= JackFailure; /* just making sure */
+ status |= JackFailure; /* just making sure */
jack_uuid_clear (&req->x.intclient.uuid);
VERBOSE (engine, "load failed, status = 0x%x", status);
} else {
@@ -1176,12 +1179,12 @@ jack_intclient_name_request (jack_engine_t *engine, jack_request_t *req)
jack_rdlock_graph (engine);
if ((client = jack_client_internal_by_id (engine,
req->x.intclient.uuid))) {
- strncpy ((char *) req->x.intclient.name,
- (char *) client->control->name,
- sizeof (req->x.intclient.name));
+ strncpy ((char*)req->x.intclient.name,
+ (char*)client->control->name,
+ sizeof(req->x.intclient.name));
req->status = 0;
} else {
- req->status = (JackNoSuchClient|JackFailure);
+ req->status = (JackNoSuchClient | JackFailure);
}
jack_unlock_graph (engine);
}
@@ -1193,7 +1196,7 @@ jack_intclient_unload_request (jack_engine_t *engine, jack_request_t *req)
* handle_unload_client() *without* it. */
if (!jack_uuid_empty (req->x.intclient.uuid)) {
- /* non-empty UUID */
+ /* non-empty UUID */
pthread_mutex_unlock (&engine->request_lock);
req->status = handle_unload_client (engine, req->x.intclient.uuid);
pthread_mutex_lock (&engine->request_lock);