diff --git a/configure.in b/configure.in index 892d56b..4f73cde 100644 --- a/configure.in +++ b/configure.in @@ -14,8 +14,8 @@ dnl micro version = incremented when implementation-only dnl changes are made dnl --- JACK_MAJOR_VERSION=0 -JACK_MINOR_VERSION=97 -JACK_MICRO_VERSION=2 +JACK_MINOR_VERSION=98 +JACK_MICRO_VERSION=0 dnl --- dnl HOWTO: updating the jack protocol version diff --git a/jack/engine.h b/jack/engine.h index 08493d1..77000c9 100644 --- a/jack/engine.h +++ b/jack/engine.h @@ -150,6 +150,7 @@ struct _jack_engine { jack_engine_t *jack_engine_new (int real_time, int real_time_priority, int do_mlock, int temporary, int verbose, int client_timeout, + unsigned int port_max, pid_t waitpid, JSList *drivers); int jack_engine_delete (jack_engine_t *); int jack_run (jack_engine_t *engine); diff --git a/jackd/engine.c b/jackd/engine.c index 98b1725..ebb29ac 100644 --- a/jackd/engine.c +++ b/jackd/engine.c @@ -1927,7 +1927,7 @@ jack_server_thread (void *arg) jack_engine_t * jack_engine_new (int realtime, int rtpriority, int do_mlock, int temporary, - int verbose, int client_timeout, pid_t wait_pid, + int verbose, int client_timeout, unsigned int port_max, pid_t wait_pid, JSList *drivers) { jack_engine_t *engine; @@ -1955,7 +1955,7 @@ jack_engine_new (int realtime, int rtpriority, int do_mlock, int temporary, engine->client_timeout_msecs = client_timeout; engine->next_client_id = 1; - engine->port_max = 128; + engine->port_max = port_max; engine->rtpriority = rtpriority; engine->silent_buffer = 0; engine->verbose = verbose; diff --git a/jackd/jackd.1.in b/jackd/jackd.1.in index 238c509..d2ba12c 100644 --- a/jackd/jackd.1.in +++ b/jackd/jackd.1.in @@ -45,6 +45,10 @@ These do not include driver options, which are obtained using the \fB\-m, \-\-no\-mlock\fR Do not attempt to lock memory, even if \fB\-\-realtime\fR. .TP +\fB\-p, \-\-port\-max \fI n\fR +Set the maximum number of ports the JACK server can manage. +The default value is 128. +.TP \fB\-R, \-\-realtime\fR .br Use realtime scheduling. This is needed for reliable low-latency diff --git a/jackd/jackd.c b/jackd/jackd.c index 7cab1f9..31b5f28 100644 --- a/jackd/jackd.c +++ b/jackd/jackd.c @@ -60,6 +60,7 @@ static int do_mlock = 1; static int temporary = 0; static int verbose = 0; static int client_timeout = 500; /* msecs */ +static unsigned int port_max = 128; static void do_nothing_handler (int sig) @@ -135,7 +136,7 @@ jack_main (jack_driver_desc_t * driver_desc, JSList * driver_params) /* get the engine/driver started */ if ((engine = jack_engine_new (realtime, realtime_priority, do_mlock, - temporary, verbose, client_timeout, + temporary, verbose, client_timeout, port_max, getpid(), drivers)) == 0) { fprintf (stderr, "cannot create engine\n"); return -1; @@ -345,6 +346,7 @@ static void usage (FILE *file) "usage: jackd [ --realtime OR -R [ --realtime-priority OR -P priority ] ]\n" " [ --no-mlock OR -m ]\n" " [ --timeout OR -t client-timeout-in-msecs ]\n" +" [ --port-max OR -p maximum-number-of-ports]\n" " [ --verbose OR -v ]\n" " [ --silent OR -s ]\n" " [ --version OR -V ]\n" @@ -384,6 +386,7 @@ main (int argc, char *argv[]) { "driver", 1, 0, 'd' }, { "verbose", 0, 0, 'v' }, { "help", 0, 0, 'h' }, + { "port-max", 1, 0, 'p' }, { "no-mlock", 0, 0, 'm' }, { "realtime", 0, 0, 'R' }, { "realtime-priority", 1, 0, 'P' }, @@ -465,6 +468,10 @@ main (int argc, char *argv[]) do_mlock = 0; break; + case 'p': + port_max = (unsigned int) atol (optarg); + break; + case 'P': realtime_priority = atoi (optarg); break; diff --git a/libjack/shm.c b/libjack/shm.c index 75c04dc..13beb97 100644 --- a/libjack/shm.c +++ b/libjack/shm.c @@ -119,7 +119,9 @@ jack_cleanup_shm (void) if (destroy) { - jack_destroy_shm (©); + if (copy.index >= 0 && copy.index < MAX_SHM_ID) { + jack_destroy_shm (©); + } r->size = 0; r->allocator = 0; }