diff options
author | paul <paul@0c269be4-1314-0410-8aa9-9f06e86f4224> | 2008-10-15 06:30:46 +0000 |
---|---|---|
committer | paul <paul@0c269be4-1314-0410-8aa9-9f06e86f4224> | 2008-10-15 06:30:46 +0000 |
commit | 69039cae1ca3079db49d39463d44b610b939a332 (patch) | |
tree | e1c4c2401514cec99f1a455b131383938cb168fe /jackd/clientengine.c | |
parent | f235681089b2abebdd4adc2ae1c0974ca7e13831 (diff) | |
download | jack1-69039cae1ca3079db49d39463d44b610b939a332.tar.gz |
fix export of pointers into JACK API headers, thus allowing a 64 bit JACK server to support 32 bit clients and vice versa (work done primarily by Torben, with a few cleanups from Paul)
git-svn-id: svn+ssh://jackaudio.org/trunk/jack@3000 0c269be4-1314-0410-8aa9-9f06e86f4224
Diffstat (limited to 'jackd/clientengine.c')
-rw-r--r-- | jackd/clientengine.c | 83 |
1 files changed, 51 insertions, 32 deletions
diff --git a/jackd/clientengine.c b/jackd/clientengine.c index 34a8526..4597c89 100644 --- a/jackd/clientengine.c +++ b/jackd/clientengine.c @@ -38,6 +38,8 @@ #include "clientengine.h" #include "transengine.h" +#include "libjack/local.h" + static void jack_client_disconnect_ports (jack_engine_t *engine, jack_client_internal_t *client) @@ -318,7 +320,7 @@ jack_client_unload (jack_client_internal_t *client) { if (client->handle) { if (client->finish) { - client->finish (client->control->process_arg); + client->finish (client->private_client->process_arg); } dlclose (client->handle); } @@ -516,25 +518,38 @@ jack_setup_client_control (jack_engine_t *engine, int fd, client->subgraph_start_fd = -1; client->subgraph_wait_fd = -1; - client->control->process = NULL; - client->control->process_arg = NULL; - client->control->bufsize = NULL; - client->control->bufsize_arg = NULL; - client->control->srate = NULL; - client->control->srate_arg = NULL; - client->control->xrun = NULL; - client->control->xrun_arg = NULL; - client->control->port_register = NULL; - client->control->port_register_arg = NULL; - client->control->port_connect = NULL; - client->control->port_connect_arg = NULL; - client->control->graph_order = NULL; - client->control->graph_order_arg = NULL; - client->control->client_register = NULL; - client->control->client_register_arg = NULL; - client->control->thread_cb = NULL; - client->control->thread_cb_arg = NULL; - + client->control->process_cbset = FALSE; + client->control->bufsize_cbset = FALSE; + client->control->srate_cbset = FALSE; + client->control->xrun_cbset = FALSE; + client->control->port_register_cbset = FALSE; + client->control->port_connect_cbset = FALSE; + client->control->graph_order_cbset = FALSE; + client->control->client_register_cbset = FALSE; + client->control->thread_cb_cbset = FALSE; + +#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; + } +#endif jack_transport_client_new (client); #ifdef JACK_USE_MACH_THREADS @@ -586,12 +601,22 @@ setup_client (jack_engine_t *engine, ClientType type, char *name, 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. + + /* Internal clients need to make regular JACK API + * calls, which need a jack_client_t structure. + * Create one here. + */ + client->private_client = + jack_client_alloc_internal (client->control, engine); + /* Set up the pointers necessary for the request * system to work. The client is in the same address * space */ - client->control->deliver_request = internal_client_request; - client->control->deliver_arg = engine; + client->private_client->deliver_request = internal_client_request; + client->private_client->deliver_arg = engine; } /* add new client to the clients list */ @@ -601,12 +626,6 @@ setup_client (jack_engine_t *engine, ClientType type, char *name, if (jack_client_is_internal(client)) { - /* Internal clients need to make regular JACK API - * calls, which need a jack_client_t structure. - * Create one here. - */ - client->control->private_client = - jack_client_alloc_internal (client->control, engine); jack_unlock_graph (engine); @@ -616,7 +635,7 @@ setup_client (jack_engine_t *engine, ClientType type, char *name, if (client->control->type == ClientInternal) { pthread_mutex_unlock (&engine->request_lock); - if (client->initialize (client->control->private_client, + if (client->initialize (client->private_client, object_data)) { /* failed: clean up client data */ @@ -735,8 +754,8 @@ jack_client_create (jack_engine_t *engine, int client_fd) res.status |= JackFailure; /* just making sure */ return -1; } - res.client_shm = client->control_shm; - res.engine_shm = engine->control_shm; + res.client_shm_index = client->control_shm.index; + res.engine_shm_index = engine->control_shm.index; res.realtime = engine->control->real_time; res.realtime_priority = engine->rtpriority - 1; strncpy (res.name, req.name, sizeof(res.name)); @@ -880,7 +899,7 @@ jack_client_delete (jack_engine_t *engine, jack_client_internal_t *client) if (jack_client_is_internal (client)) { jack_client_unload (client); - free (client->control->private_client); + free (client->private_client); free ((void *) client->control); } else { |