summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPierre Ossman <ossman@cendio.se>2006-01-05 18:09:46 +0000
committerPierre Ossman <ossman@cendio.se>2006-01-05 18:09:46 +0000
commit7dcf4e45963b2aff840ea53bde4012e3c6cac9f8 (patch)
treefe1a7053b879607c652cc9b6f4a38c72b1aa9439
parenteacffc3e4d581f0fe57536e7ccfba7293623586c (diff)
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
-rw-r--r--polyp/core.c2
-rw-r--r--polyp/main.c20
-rw-r--r--polyp/pacat.c4
-rw-r--r--polyp/pactl.c2
-rw-r--r--polyp/paplay.c2
-rw-r--r--polyp/polyplib-context.c4
-rw-r--r--polyp/util.c12
7 files changed, 45 insertions, 1 deletions
diff --git a/polyp/core.c b/polyp/core.c
index 539c6775..60439243 100644
--- a/polyp/core.c
+++ b/polyp/core.c
@@ -89,7 +89,9 @@ struct pa_core* pa_core_new(struct pa_mainloop_api *m) {
pa_random(&c->cookie, sizeof(c->cookie));
+#ifdef SIGPIPE
pa_check_signal_is_blocked(SIGPIPE);
+#endif
return c;
}
diff --git a/polyp/main.c b/polyp/main.c
index 26fa4a87..2e97e5cc 100644
--- a/polyp/main.c
+++ b/polyp/main.c
@@ -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));
switch (sig) {
+#ifdef SIGUSR1
case SIGUSR1:
pa_module_load(userdata, "module-cli", NULL);
break;
+#endif
+#ifdef SIGUSR2
case SIGUSR2:
pa_module_load(userdata, "module-cli-protocol-unix", NULL);
break;
+#endif
+#ifdef SIGHUP
case SIGHUP: {
char *c = pa_full_status_string(userdata);
pa_log_notice(c);
pa_xfree(c);
return;
}
+#endif
case SIGINT:
case SIGTERM:
@@ -263,9 +269,15 @@ int main(int argc, char *argv[]) {
open("/dev/null", O_WRONLY);
open("/dev/null", O_WRONLY);
+#ifdef SIGTTOU
signal(SIGTTOU, SIG_IGN);
+#endif
+#ifdef SIGTTIN
signal(SIGTTIN, SIG_IGN);
+#endif
+#ifdef SIGTSTP
signal(SIGTSTP, SIG_IGN);
+#endif
if ((tty_fd = open("/dev/tty", O_RDWR)) >= 0) {
ioctl(tty_fd, TIOCNOTTY, (char*) 0);
@@ -292,16 +304,24 @@ int main(int argc, char *argv[]) {
assert(r == 0);
pa_signal_new(SIGINT, signal_callback, c);
pa_signal_new(SIGTERM, signal_callback, c);
+#ifdef SIGPIPE
signal(SIGPIPE, SIG_IGN);
+#endif
c = pa_core_new(pa_mainloop_get_api(mainloop));
assert(c);
if (conf->daemonize)
c->running_as_daemon = 1;
+#ifdef SIGUSR1
pa_signal_new(SIGUSR1, signal_callback, c);
+#endif
+#ifdef SIGUSR2
pa_signal_new(SIGUSR2, signal_callback, c);
+#endif
+#ifdef SIGHUP
pa_signal_new(SIGHUP, signal_callback, c);
+#endif
r = pa_cpu_limit_init(pa_mainloop_get_api(mainloop));
assert(r == 0);
diff --git a/polyp/pacat.c b/polyp/pacat.c
index 5910d13f..1bba2ee4 100644
--- a/polyp/pacat.c
+++ b/polyp/pacat.c
@@ -480,8 +480,12 @@ int main(int argc, char *argv[]) {
assert(r == 0);
pa_signal_new(SIGINT, exit_signal_callback, NULL);
pa_signal_new(SIGTERM, exit_signal_callback, NULL);
+#ifdef SIGUSR1
pa_signal_new(SIGUSR1, sigusr1_signal_callback, NULL);
+#endif
+#ifdef SIGPIPE
signal(SIGPIPE, SIG_IGN);
+#endif
if (!(stdio_event = mainloop_api->io_new(mainloop_api,
mode == PLAYBACK ? STDIN_FILENO : STDOUT_FILENO,
diff --git a/polyp/pactl.c b/polyp/pactl.c
index 423cce95..725b5460 100644
--- a/polyp/pactl.c
+++ b/polyp/pactl.c
@@ -739,7 +739,9 @@ int main(int argc, char *argv[]) {
r = pa_signal_init(mainloop_api);
assert(r == 0);
pa_signal_new(SIGINT, exit_signal_callback, NULL);
+#ifdef SIGPIPE
signal(SIGPIPE, SIG_IGN);
+#endif
if (!(context = pa_context_new(mainloop_api, client_name))) {
fprintf(stderr, "pa_context_new() failed.\n");
diff --git a/polyp/paplay.c b/polyp/paplay.c
index 2eaf07c1..4ace1973 100644
--- a/polyp/paplay.c
+++ b/polyp/paplay.c
@@ -338,7 +338,9 @@ int main(int argc, char *argv[]) {
r = pa_signal_init(mainloop_api);
assert(r == 0);
pa_signal_new(SIGINT, exit_signal_callback, NULL);
+#ifdef SIGPIPE
signal(SIGPIPE, SIG_IGN);
+#endif
/* Create a new connection context */
if (!(context = pa_context_new(mainloop_api, client_name))) {
diff --git a/polyp/polyplib-context.c b/polyp/polyplib-context.c
index bca7d7ea..f54cabbe 100644
--- a/polyp/polyplib-context.c
+++ b/polyp/polyplib-context.c
@@ -110,8 +110,10 @@ struct pa_context *pa_context_new(struct pa_mainloop_api *mainloop, const char *
c->autospawn_lock_fd = -1;
memset(&c->spawn_api, 0, sizeof(c->spawn_api));
c->do_autospawn = 0;
-
+
+#ifdef SIGPIPE
pa_check_signal_is_blocked(SIGPIPE);
+#endif
c->conf = pa_client_conf_new();
pa_client_conf_load(c->conf, NULL);
diff --git a/polyp/util.c b/polyp/util.c
index 2c4285fb..fdafe252 100644
--- a/polyp/util.c
+++ b/polyp/util.c
@@ -527,12 +527,24 @@ const char *pa_strsignal(int sig) {
switch(sig) {
case SIGINT: return "SIGINT";
case SIGTERM: return "SIGTERM";
+#ifdef SIGUSR1
case SIGUSR1: return "SIGUSR1";
+#endif
+#ifdef SIGUSR2
case SIGUSR2: return "SIGUSR2";
+#endif
+#ifdef SIGXCPU
case SIGXCPU: return "SIGXCPU";
+#endif
+#ifdef SIGPIPE
case SIGPIPE: return "SIGPIPE";
+#endif
+#ifdef SIGCHLD
case SIGCHLD: return "SIGCHLD";
+#endif
+#ifdef SIGHUP
case SIGHUP: return "SIGHUP";
+#endif
default: return "UNKNOWN SIGNAL";
}
}