From: Simone Z. <si...@de...> - 2005-02-28 11:23:29
|
Hi, I need to run many instances of Timidity as Jack clients at the same time. But once executed the fisrt Timidity instance, when I try to run the second, Timidity exits immediately and Jack says: "cannot create new client; TiMidity already exists." The problem is that the second instance tries to register itself with the same name as the first. Temporary I fix the problem with the following patch. The patch generates always a unique client name using the string "TiMidity" followed by the process id. I could also implement a new command line option to assign the client name, e.g.: timidity -Oj --name=timidityA Any suggestion? Simone Index: timidity/jack_a.c =================================================================== RCS file: /cvsroot/timidity/timidity/timidity/jack_a.c,v retrieving revision 1.3 diff -u -r1.3 jack_a.c --- timidity/jack_a.c 17 Feb 2004 16:02:18 -0000 1.3 +++ timidity/jack_a.c 27 Feb 2005 23:32:43 -0000 @@ -260,13 +260,14 @@ static struct tm_jack jack_ctx; -#define TIMIDITY_JACK_CLIENT_NAME "TiMidity" +#define TIMIDITY_JACK_CLIENT_NAME "TiMidity%d" #define TIMIDITY_JACK_PORT_NAME "port_%d" +char name[sizeof(TIMIDITY_JACK_CLIENT_NAME) + 6]; static int detect(void) { jack_client_t *client; - client = jack_client_new(TIMIDITY_JACK_CLIENT_NAME); + client = jack_client_new(name); if (! client) return 0; jack_client_close(client); @@ -282,7 +283,9 @@ memset(ctx, 0, sizeof(*ctx)); - ctx->client = jack_client_new(TIMIDITY_JACK_CLIENT_NAME); + sprintf(name, TIMIDITY_JACK_CLIENT_NAME, getpid()); + + ctx->client = jack_client_new(name); if (! ctx->client) return -1; |