From dab7602a892e5c570c5f63478cc5d929a7e2a356 Mon Sep 17 00:00:00 2001 From: wm4 Date: Wed, 24 Dec 2014 13:25:33 +0100 Subject: [PATCH] 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. --- libmpv/client.h | 2 ++ osdep/terminal-unix.c | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/libmpv/client.h b/libmpv/client.h index 11b27b26df..85b1900068 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();