mirror of
https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
synced 2025-11-05 13:29:57 -05:00
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:
parent
eacffc3e4d
commit
7dcf4e4596
7 changed files with 45 additions and 1 deletions
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
20
polyp/main.c
20
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));
|
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);
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -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");
|
||||||
|
|
|
||||||
|
|
@ -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))) {
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
12
polyp/util.c
12
polyp/util.c
|
|
@ -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";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue