From 7c9b90416c2b32f21ccbf5600580ca8182125440 Mon Sep 17 00:00:00 2001 From: torben Date: Sun, 29 May 2011 00:46:33 +0000 Subject: [controlAPI] block signals in server_start... this should probably go into the thread_create wrapper, but thats not decided yet. git-svn-id: svn+ssh://jackaudio.org/trunk/jack@4416 0c269be4-1314-0410-8aa9-9f06e86f4224 --- jackd/controlapi.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) (limited to 'jackd/controlapi.c') diff --git a/jackd/controlapi.c b/jackd/controlapi.c index 6ae2d7a..3744fdc 100644 --- a/jackd/controlapi.c +++ b/jackd/controlapi.c @@ -809,6 +809,33 @@ jackctl_wait_signals(sigset_t signals) } #endif +static sigset_t +jackctl_block_signals() +{ + sigset_t signals; + sigset_t oldsignals; + + sigemptyset(&signals); + sigaddset(&signals, SIGHUP); + sigaddset(&signals, SIGINT); + sigaddset(&signals, SIGQUIT); + sigaddset(&signals, SIGPIPE); + sigaddset(&signals, SIGTERM); + sigaddset(&signals, SIGUSR1); + sigaddset(&signals, SIGUSR2); + + pthread_sigmask(SIG_BLOCK, &signals, &oldsignals); + + return oldsignals; +} + +static void +jackctl_unblock_signals(sigset_t oldsignals) +{ + pthread_sigmask(SIG_SETMASK, &oldsignals, 0); +} + + static jack_driver_param_constraint_desc_t * get_realtime_priority_constraint() @@ -1097,6 +1124,8 @@ jackctl_server_start( jackctl_driver_t *driver_ptr) { int rc; + sigmask_t oldsignals; + // TODO: int frame_time_offset = 0; @@ -1125,6 +1154,8 @@ jackctl_server_start( if (!server_ptr->realtime.b && server_ptr->client_timeout.i == 0) server_ptr->client_timeout.i = 500; /* 0.5 sec; usable when non realtime. */ + oldsignals = jackctl_block_signals(); + if ((server_ptr->engine = jack_engine_new (server_ptr->realtime.b, server_ptr->realtime_priority.i, server_ptr->do_mlock.b, server_ptr->do_unlock.b, server_ptr->name.str, server_ptr->temporary.b, server_ptr->verbose.b, server_ptr->client_timeout.i, @@ -1145,6 +1176,7 @@ jackctl_server_start( goto fail_close; } + jackctl_unblock_signals( oldsignals ); return true; fail_close: @@ -1165,6 +1197,7 @@ fail_unregister: //jack_log("unregistering server `%s'", server_ptr->name.str); jack_unregister_server(server_ptr->name.str); + jackctl_unblock_signals( oldsignals ); fail: return false; -- cgit v1.2.1