The standard declares some signals as optional. Make sure we handle

this gracefully.


git-svn-id: file:///home/lennart/svn/public/pulseaudio/branches/ossman@374 fefdeb5f-60dc-0310-8127-8f9354f1896f
This commit is contained in:
Pierre Ossman 2006-01-05 18:09:46 +00:00
parent eacffc3e4d
commit 7dcf4e4596
7 changed files with 45 additions and 1 deletions

View file

@ -89,7 +89,9 @@ struct pa_core* pa_core_new(struct pa_mainloop_api *m) {
pa_random(&c->cookie, sizeof(c->cookie)); pa_random(&c->cookie, sizeof(c->cookie));
#ifdef SIGPIPE
pa_check_signal_is_blocked(SIGPIPE); pa_check_signal_is_blocked(SIGPIPE);
#endif
return c; return c;
} }

View file

@ -70,20 +70,26 @@ static void signal_callback(struct pa_mainloop_api*m, struct pa_signal_event *e,
pa_log_info(__FILE__": Got signal %s.\n", pa_strsignal(sig)); pa_log_info(__FILE__": Got signal %s.\n", pa_strsignal(sig));
switch (sig) { switch (sig) {
#ifdef SIGUSR1
case SIGUSR1: case SIGUSR1:
pa_module_load(userdata, "module-cli", NULL); pa_module_load(userdata, "module-cli", NULL);
break; break;
#endif
#ifdef SIGUSR2
case SIGUSR2: case SIGUSR2:
pa_module_load(userdata, "module-cli-protocol-unix", NULL); pa_module_load(userdata, "module-cli-protocol-unix", NULL);
break; break;
#endif
#ifdef SIGHUP
case SIGHUP: { case SIGHUP: {
char *c = pa_full_status_string(userdata); char *c = pa_full_status_string(userdata);
pa_log_notice(c); pa_log_notice(c);
pa_xfree(c); pa_xfree(c);
return; return;
} }
#endif
case SIGINT: case SIGINT:
case SIGTERM: case SIGTERM:
@ -263,9 +269,15 @@ int main(int argc, char *argv[]) {
open("/dev/null", O_WRONLY); open("/dev/null", O_WRONLY);
open("/dev/null", O_WRONLY); open("/dev/null", O_WRONLY);
#ifdef SIGTTOU
signal(SIGTTOU, SIG_IGN); signal(SIGTTOU, SIG_IGN);
#endif
#ifdef SIGTTIN
signal(SIGTTIN, SIG_IGN); signal(SIGTTIN, SIG_IGN);
#endif
#ifdef SIGTSTP
signal(SIGTSTP, SIG_IGN); signal(SIGTSTP, SIG_IGN);
#endif
if ((tty_fd = open("/dev/tty", O_RDWR)) >= 0) { if ((tty_fd = open("/dev/tty", O_RDWR)) >= 0) {
ioctl(tty_fd, TIOCNOTTY, (char*) 0); ioctl(tty_fd, TIOCNOTTY, (char*) 0);
@ -292,16 +304,24 @@ int main(int argc, char *argv[]) {
assert(r == 0); assert(r == 0);
pa_signal_new(SIGINT, signal_callback, c); pa_signal_new(SIGINT, signal_callback, c);
pa_signal_new(SIGTERM, signal_callback, c); pa_signal_new(SIGTERM, signal_callback, c);
#ifdef SIGPIPE
signal(SIGPIPE, SIG_IGN); signal(SIGPIPE, SIG_IGN);
#endif
c = pa_core_new(pa_mainloop_get_api(mainloop)); c = pa_core_new(pa_mainloop_get_api(mainloop));
assert(c); assert(c);
if (conf->daemonize) if (conf->daemonize)
c->running_as_daemon = 1; c->running_as_daemon = 1;
#ifdef SIGUSR1
pa_signal_new(SIGUSR1, signal_callback, c); pa_signal_new(SIGUSR1, signal_callback, c);
#endif
#ifdef SIGUSR2
pa_signal_new(SIGUSR2, signal_callback, c); pa_signal_new(SIGUSR2, signal_callback, c);
#endif
#ifdef SIGHUP
pa_signal_new(SIGHUP, signal_callback, c); pa_signal_new(SIGHUP, signal_callback, c);
#endif
r = pa_cpu_limit_init(pa_mainloop_get_api(mainloop)); r = pa_cpu_limit_init(pa_mainloop_get_api(mainloop));
assert(r == 0); assert(r == 0);

View file

@ -480,8 +480,12 @@ int main(int argc, char *argv[]) {
assert(r == 0); assert(r == 0);
pa_signal_new(SIGINT, exit_signal_callback, NULL); pa_signal_new(SIGINT, exit_signal_callback, NULL);
pa_signal_new(SIGTERM, exit_signal_callback, NULL); pa_signal_new(SIGTERM, exit_signal_callback, NULL);
#ifdef SIGUSR1
pa_signal_new(SIGUSR1, sigusr1_signal_callback, NULL); pa_signal_new(SIGUSR1, sigusr1_signal_callback, NULL);
#endif
#ifdef SIGPIPE
signal(SIGPIPE, SIG_IGN); signal(SIGPIPE, SIG_IGN);
#endif
if (!(stdio_event = mainloop_api->io_new(mainloop_api, if (!(stdio_event = mainloop_api->io_new(mainloop_api,
mode == PLAYBACK ? STDIN_FILENO : STDOUT_FILENO, mode == PLAYBACK ? STDIN_FILENO : STDOUT_FILENO,

View file

@ -739,7 +739,9 @@ int main(int argc, char *argv[]) {
r = pa_signal_init(mainloop_api); r = pa_signal_init(mainloop_api);
assert(r == 0); assert(r == 0);
pa_signal_new(SIGINT, exit_signal_callback, NULL); pa_signal_new(SIGINT, exit_signal_callback, NULL);
#ifdef SIGPIPE
signal(SIGPIPE, SIG_IGN); signal(SIGPIPE, SIG_IGN);
#endif
if (!(context = pa_context_new(mainloop_api, client_name))) { if (!(context = pa_context_new(mainloop_api, client_name))) {
fprintf(stderr, "pa_context_new() failed.\n"); fprintf(stderr, "pa_context_new() failed.\n");

View file

@ -338,7 +338,9 @@ int main(int argc, char *argv[]) {
r = pa_signal_init(mainloop_api); r = pa_signal_init(mainloop_api);
assert(r == 0); assert(r == 0);
pa_signal_new(SIGINT, exit_signal_callback, NULL); pa_signal_new(SIGINT, exit_signal_callback, NULL);
#ifdef SIGPIPE
signal(SIGPIPE, SIG_IGN); signal(SIGPIPE, SIG_IGN);
#endif
/* Create a new connection context */ /* Create a new connection context */
if (!(context = pa_context_new(mainloop_api, client_name))) { if (!(context = pa_context_new(mainloop_api, client_name))) {

View file

@ -110,8 +110,10 @@ struct pa_context *pa_context_new(struct pa_mainloop_api *mainloop, const char *
c->autospawn_lock_fd = -1; c->autospawn_lock_fd = -1;
memset(&c->spawn_api, 0, sizeof(c->spawn_api)); memset(&c->spawn_api, 0, sizeof(c->spawn_api));
c->do_autospawn = 0; c->do_autospawn = 0;
#ifdef SIGPIPE
pa_check_signal_is_blocked(SIGPIPE); pa_check_signal_is_blocked(SIGPIPE);
#endif
c->conf = pa_client_conf_new(); c->conf = pa_client_conf_new();
pa_client_conf_load(c->conf, NULL); pa_client_conf_load(c->conf, NULL);

View file

@ -527,12 +527,24 @@ const char *pa_strsignal(int sig) {
switch(sig) { switch(sig) {
case SIGINT: return "SIGINT"; case SIGINT: return "SIGINT";
case SIGTERM: return "SIGTERM"; case SIGTERM: return "SIGTERM";
#ifdef SIGUSR1
case SIGUSR1: return "SIGUSR1"; case SIGUSR1: return "SIGUSR1";
#endif
#ifdef SIGUSR2
case SIGUSR2: return "SIGUSR2"; case SIGUSR2: return "SIGUSR2";
#endif
#ifdef SIGXCPU
case SIGXCPU: return "SIGXCPU"; case SIGXCPU: return "SIGXCPU";
#endif
#ifdef SIGPIPE
case SIGPIPE: return "SIGPIPE"; case SIGPIPE: return "SIGPIPE";
#endif
#ifdef SIGCHLD
case SIGCHLD: return "SIGCHLD"; case SIGCHLD: return "SIGCHLD";
#endif
#ifdef SIGHUP
case SIGHUP: return "SIGHUP"; case SIGHUP: return "SIGHUP";
#endif
default: return "UNKNOWN SIGNAL"; default: return "UNKNOWN SIGNAL";
} }
} }