summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/daemon/main.c4
-rw-r--r--src/pulsecore/core-util.c21
-rw-r--r--src/pulsecore/core-util.h2
-rw-r--r--src/utils/pabrowse.c4
4 files changed, 27 insertions, 4 deletions
diff --git a/src/daemon/main.c b/src/daemon/main.c
index a2324516..3e50baad 100644
--- a/src/daemon/main.c
+++ b/src/daemon/main.c
@@ -946,9 +946,7 @@ int main(int argc, char *argv[]) {
valid_pid_file = TRUE;
}
-#ifdef SIGPIPE
- signal(SIGPIPE, SIG_IGN);
-#endif
+ pa_disable_sigpipe();
if (pa_rtclock_hrtimer())
pa_log_info(_("Fresh high-resolution timers available! Bon appetit!"));
diff --git a/src/pulsecore/core-util.c b/src/pulsecore/core-util.c
index d4956fb8..b747cd84 100644
--- a/src/pulsecore/core-util.c
+++ b/src/pulsecore/core-util.c
@@ -2711,3 +2711,24 @@ char *pa_realpath(const char *path) {
return t;
}
+
+void pa_disable_sigpipe(void) {
+
+#ifdef SIGPIPE
+ struct sigaction sa;
+
+ pa_zero(sa);
+
+ if (sigaction(SIGPIPE, NULL, &sa) < 0) {
+ pa_log("sigaction(): %s", pa_cstrerror(errno));
+ return;
+ }
+
+ sa.sa_handler = SIG_IGN;
+
+ if (sigaction(SIGPIPE, &sa, NULL) < 0) {
+ pa_log("sigaction(): %s", pa_cstrerror(errno));
+ return;
+ }
+#endif
+}
diff --git a/src/pulsecore/core-util.h b/src/pulsecore/core-util.h
index 91a4c55a..d073b750 100644
--- a/src/pulsecore/core-util.h
+++ b/src/pulsecore/core-util.h
@@ -227,4 +227,6 @@ char *pa_unescape(char *p);
char *pa_realpath(const char *path);
+void pa_disable_sigpipe(void);
+
#endif
diff --git a/src/utils/pabrowse.c b/src/utils/pabrowse.c
index 288d44a9..a6487b88 100644
--- a/src/utils/pabrowse.c
+++ b/src/utils/pabrowse.c
@@ -30,6 +30,8 @@
#include <pulse/pulseaudio.h>
#include <pulse/browser.h>
+#include <pulsecore/core-util.h>
+
static void exit_signal_callback(pa_mainloop_api*m, pa_signal_event *e, int sig, void *userdata) {
fprintf(stderr, "Got signal, exiting\n");
m->quit(m, 0);
@@ -127,7 +129,7 @@ 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);
- signal(SIGPIPE, SIG_IGN);
+ pa_disable_sigpipe();
if (!(browser = pa_browser_new_full(pa_mainloop_get_api(mainloop), PA_BROWSE_FOR_SERVERS|PA_BROWSE_FOR_SINKS|PA_BROWSE_FOR_SOURCES, &s))) {
fprintf(stderr, "pa_browse_new_full(): %s\n", s);