summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--DOCS/client-api-changes.rst3
-rw-r--r--libmpv/client.h8
-rw-r--r--osdep/terminal-unix.c3
-rw-r--r--player/main.c7
4 files changed, 14 insertions, 7 deletions
diff --git a/DOCS/client-api-changes.rst b/DOCS/client-api-changes.rst
index 009aab7ac7..6dc473caba 100644
--- a/DOCS/client-api-changes.rst
+++ b/DOCS/client-api-changes.rst
@@ -25,10 +25,11 @@ API changes
::
+ 1.17 - mpv_initialize() now blocks SIGPIPE (details see client.h)
--- mpv 0.9.0 is released ---
- 1.17 - add MPV_FORMAT_BYTE_ARRAY
1.16 - add mpv_opengl_cb_report_flip()
- introduce mpv_opengl_cb_draw() and deprecate mpv_opengl_cb_render()
+ - add MPV_FORMAT_BYTE_ARRAY
1.15 - mpv_initialize() will now load config files. This requires setting
the "config" and "config-dir" options. In particular, it will load
mpv.conf.
diff --git a/libmpv/client.h b/libmpv/client.h
index 5a7a54ad67..8958865c79 100644
--- a/libmpv/client.h
+++ b/libmpv/client.h
@@ -118,8 +118,10 @@ 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 UNIX, every mpv_initialize() call will block SIGPIPE. This is done
+ * because FFmpeg makes unsafe use of OpenSSL and GnuTLS, which can raise
+ * this signal under certain circumstances. Once these libraries (or FFmpeg)
+ * are fixed, libmpv will not block the signal anymore.
* - On memory exhaustion, mpv will kill the process.
*
* Encoding of filenames
@@ -196,7 +198,7 @@ extern "C" {
* relational operators (<, >, <=, >=).
*/
#define MPV_MAKE_VERSION(major, minor) (((major) << 16) | (minor) | 0UL)
-#define MPV_CLIENT_API_VERSION MPV_MAKE_VERSION(1, 16)
+#define MPV_CLIENT_API_VERSION MPV_MAKE_VERSION(1, 17)
/**
* Return the MPV_CLIENT_API_VERSION the mpv source has been compiled with.
diff --git a/osdep/terminal-unix.c b/osdep/terminal-unix.c
index f43376b088..478b613999 100644
--- a/osdep/terminal-unix.c
+++ b/osdep/terminal-unix.c
@@ -488,9 +488,6 @@ int terminal_init(void)
setsigaction(SIGTTIN, SIG_IGN, 0, true);
setsigaction(SIGTTOU, SIG_IGN, 0, true);
- // get sane behavior, instead of hysteric UNIX-nonsense
- setsigaction(SIGPIPE, SIG_IGN, 0, true);
-
getch2_poll();
return 0;
diff --git a/player/main.c b/player/main.c
index b80bc994bb..bc08310e9c 100644
--- a/player/main.c
+++ b/player/main.c
@@ -22,6 +22,7 @@
#include <assert.h>
#include <string.h>
#include <pthread.h>
+#include <signal.h>
#include "config.h"
#include "talloc.h"
@@ -489,6 +490,12 @@ int mp_initialize(struct MPContext *mpctx, char **options)
if (opts->w32_priority > 0)
SetPriorityClass(GetCurrentProcess(), opts->w32_priority);
#endif
+#ifndef _WIN32
+ // Deal with OpenSSL and GnuTLS not using MSG_NOSIGNAL.
+ struct sigaction sa = { .sa_handler = SIG_IGN, .sa_flags = SA_RESTART };
+ sigfillset(&sa.sa_mask);
+ sigaction(SIGPIPE, &sa, NULL);
+#endif
prepare_playlist(mpctx, mpctx->playlist);