summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2014-12-24 13:25:33 +0100
committerwm4 <wm4@nowhere>2014-12-24 13:25:33 +0100
commit7f36d1532e29a29305971bd7c19fd803d9603a04 (patch)
treef0dd57874cf4c56dac348ea2d5209f715111042c
parent98a80884da100eaee283447a0380c761b15266c7 (diff)
downloadmpv-7f36d1532e29a29305971bd7c19fd803d9603a04.tar.bz2
mpv-7f36d1532e29a29305971bd7c19fd803d9603a04.tar.xz
client API: document requirement to block SIGPIPE
I noticed that the IPC code does not use MSG_NOSIGNAL or SO_NOSIGPIPE. The former is "only" POSIX 2008 and also requires switching to sendto(), while the latter is even less portable. Not going to bother with this obsolete 80ies crap, just block SIGPIPE, and instruct client API users to do the same.
-rw-r--r--libmpv/client.h2
-rw-r--r--osdep/terminal-unix.c2
2 files changed, 3 insertions, 1 deletions
diff --git a/libmpv/client.h b/libmpv/client.h
index 9ed2cabd27..344bfdd9d5 100644
--- a/libmpv/client.h
+++ b/libmpv/client.h
@@ -117,6 +117,8 @@ extern "C" {
* (used through libass), ALSA, FFmpeg, and possibly more.
* - The FPU precision must be set at least to double precision.
* - On Windows, mpv will call timeBeginPeriod(1).
+ * - SIGPIPE should be blocked. Some parts rely on this signal not crashing the
+ * process (such as ffmpeg OpenSSL support, or the mpv IPC code).
* - On memory exhaustion, mpv will kill the process.
*
* Embedding the video window
diff --git a/osdep/terminal-unix.c b/osdep/terminal-unix.c
index 85908c551a..bc0dc8336b 100644
--- a/osdep/terminal-unix.c
+++ b/osdep/terminal-unix.c
@@ -488,7 +488,7 @@ int terminal_init(void)
setsigaction(SIGTTIN, SIG_IGN, 0, true);
setsigaction(SIGTTOU, SIG_IGN, 0, true);
- // don't crash on SIGPIPE caused by semi-broken libraries
+ // get sane behavior, instead of hysteric UNIX-nonsense
setsigaction(SIGPIPE, SIG_IGN, 0, true);
getch2_poll();