summaryrefslogtreecommitdiff
path: root/fftools
diff options
context:
space:
mode:
authorMark Thompson <sw@jkqxz.net>2018-01-18 23:24:05 +0000
committerMark Thompson <sw@jkqxz.net>2018-01-25 22:54:10 +0000
commit74cf4a75f74ee3d80d021fc50b05e38bff5940e3 (patch)
treea86d068c59bdfab6a3e12b2dab3f8ebcafb43688 /fftools
parent04e4ab44d7c5eca9e1929b34d8fb966afc403e3a (diff)
ffmpeg: Ignore SIGPIPE
On systems which deliver SIGPIPE (Unices), a broken pipe will currently result in the immediate termination of the ffmpeg process (the default disposition as required by POSIX). This is undesirable, because while the broken pipe is likely fatal to useful cleanup of whatever component is writing to it, there might be other components which can do useful cleanup - for example, a muxer on another stream may still need to write indexes to complete a file. Therefore, set the signal disposition for SIGPIPE to ignore the signal - the call which caused the signal will fail with EPIPE and the error will be propagated upwards like any other I/O failure on a single stream.
Diffstat (limited to 'fftools')
-rw-r--r--fftools/ffmpeg.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/fftools/ffmpeg.c b/fftools/ffmpeg.c
index 528849a2c6..918eb353aa 100644
--- a/fftools/ffmpeg.c
+++ b/fftools/ffmpeg.c
@@ -406,6 +406,9 @@ void term_init(void)
#ifdef SIGXCPU
signal(SIGXCPU, sigterm_handler);
#endif
+#ifdef SIGPIPE
+ signal(SIGPIPE, SIG_IGN); /* Broken pipe (POSIX). */
+#endif
#if HAVE_SETCONSOLECTRLHANDLER
SetConsoleCtrlHandler((PHANDLER_ROUTINE) CtrlHandler, TRUE);
#endif