summaryrefslogtreecommitdiff
path: root/jackd
diff options
context:
space:
mode:
authorpaul <paul@0c269be4-1314-0410-8aa9-9f06e86f4224>2007-06-07 01:13:48 +0000
committerpaul <paul@0c269be4-1314-0410-8aa9-9f06e86f4224>2007-06-07 01:13:48 +0000
commit581f790f699e80a6049c15a82349b769e0a27249 (patch)
tree098d8e268e64a9215e78228db2865743766da548 /jackd
parentfbf63c578f150cf03cb533179ed5070329504bed (diff)
downloadjack1-581f790f699e80a6049c15a82349b769e0a27249.tar.gz
add -Z flag to cancel zombification on timeout
git-svn-id: svn+ssh://jackaudio.org/trunk/jack@1044 0c269be4-1314-0410-8aa9-9f06e86f4224
Diffstat (limited to 'jackd')
-rw-r--r--jackd/clientengine.c12
-rw-r--r--jackd/engine.c3
-rw-r--r--jackd/jackd.1.in6
-rw-r--r--jackd/jackd.c10
4 files changed, 24 insertions, 7 deletions
diff --git a/jackd/clientengine.c b/jackd/clientengine.c
index b7e0401..8886a28 100644
--- a/jackd/clientengine.c
+++ b/jackd/clientengine.c
@@ -95,7 +95,7 @@ jack_zombify_client (jack_engine_t *engine, jack_client_internal_t *client)
/* this stops jack_deliver_event() from doing anything */
client->control->dead = TRUE;
-
+
jack_client_disconnect_ports (engine, client);
jack_client_do_deactivate (engine, client, FALSE);
}
@@ -201,10 +201,12 @@ jack_remove_clients (jack_engine_t* engine)
client->control->name,
jack_client_state_name (client),
client->error);
- jack_zombify_client (engine,
- (jack_client_internal_t *)
- node->data);
- client->error = 0;
+ if (!engine->nozombies) {
+ jack_zombify_client (engine,
+ (jack_client_internal_t *)
+ node->data);
+ client->error = 0;
+ }
}
need_sort = TRUE;
diff --git a/jackd/engine.c b/jackd/engine.c
index e701c45..b8cacb7 100644
--- a/jackd/engine.c
+++ b/jackd/engine.c
@@ -1575,7 +1575,7 @@ jack_engine_t *
jack_engine_new (int realtime, int rtpriority, int do_mlock, int do_unlock,
const char *server_name, int temporary, int verbose,
int client_timeout, unsigned int port_max, pid_t wait_pid,
- jack_nframes_t frame_time_offset, JSList *drivers)
+ jack_nframes_t frame_time_offset, int nozombies, JSList *drivers)
{
jack_engine_t *engine;
unsigned int i;
@@ -1640,6 +1640,7 @@ jack_engine_new (int realtime, int rtpriority, int do_mlock, int do_unlock,
engine->freewheeling = 0;
engine->feedbackcount = 0;
engine->wait_pid = wait_pid;
+ engine->nozombies = nozombies;
jack_engine_reset_rolling_usecs (engine);
engine->max_usecs = 0.0f;
diff --git a/jackd/jackd.1.in b/jackd/jackd.1.in
index 18815f5..8c2878f 100644
--- a/jackd/jackd.1.in
+++ b/jackd/jackd.1.in
@@ -89,6 +89,12 @@ Exit once all clients have closed their connections.
Set client timeout limit in milliseconds. The default is 500 msec.
In realtime mode the client timeout must be smaller than the watchdog timeout (5000 msec).
.TP
+\fB\-Z, \-\-nozombies\fR
+.br
+Prevent JACK from ever kicking out clients because they were too slow.
+This cancels the effect any specified timeout value, but JACK and its clients are
+still subject to the supervision of the watchdog thread or its equivalent.
+.TP
\fB\-u, \-\-unlock\fR
.br
Unlock libraries GTK+, QT, FLTK, Wine.
diff --git a/jackd/jackd.c b/jackd/jackd.c
index d1de77d..66024df 100644
--- a/jackd/jackd.c
+++ b/jackd/jackd.c
@@ -65,6 +65,7 @@ static int client_timeout = 0; /* msecs; if zero, use period size. */
static unsigned int port_max = 256;
static int do_unlock = 0;
static jack_nframes_t frame_time_offset = 0;
+static int nozombies = 0;
static void
do_nothing_handler (int sig)
@@ -145,7 +146,8 @@ jack_main (jack_driver_desc_t * driver_desc, JSList * driver_params)
if ((engine = jack_engine_new (realtime, realtime_priority,
do_mlock, do_unlock, server_name,
temporary, verbose, client_timeout,
- port_max, getpid(), frame_time_offset, drivers)) == 0) {
+ port_max, getpid(), frame_time_offset,
+ nozombies, drivers)) == 0) {
fprintf (stderr, "cannot create engine\n");
return -1;
}
@@ -373,6 +375,7 @@ static void usage (FILE *file)
" [ --clocksource OR -c [ c(ycle) | h(pet) | s(ystem) ]\n"
" [ --silent OR -s ]\n"
" [ --version OR -V ]\n"
+" [ --nozombies OR -Z ]\n"
" -d backend [ ... backend args ... ]\n"
" The backend can be `alsa', `coreaudio', `dummy',\n"
" `freebob', `oss' or `portaudio'.\n\n"
@@ -526,6 +529,7 @@ main (int argc, char *argv[])
{ "version", 0, 0, 'V' },
{ "silent", 0, 0, 's' },
{ "clock-source", 1, 0, 'c' },
+ { "nozombies", 0, 0, 'Z' },
{ 0, 0, 0, 0 }
};
int opt = 0;
@@ -620,6 +624,10 @@ main (int argc, char *argv[])
show_version = 1;
break;
+ case 'Z':
+ nozombies = 1;
+ break;
+
default:
fprintf (stderr, "Unknown option character %c\n",
optopt);