aboutsummaryrefslogtreecommitdiff
path: root/lisp/emms-player-mpv.el
diff options
context:
space:
mode:
authorMike Kazantsev <mk.fraggod@gmail.com>2018-06-30 21:45:49 +0500
committerfraggod@malediction <mk.fraggod@gmail.com>2018-06-30 21:45:49 +0500
commitf5a09d93c86c676cbce490cf670f95e6fe127c9f (patch)
treed9e69f97de9fc97979a5cb6ed8ddaf914d801774 /lisp/emms-player-mpv.el
parentb0b406189b96ba9b0773e1c40449a0f0c9abf95e (diff)
* lisp/emms-player-mpv.el: use blocking ipc sockets as a workaround for emacs-26 issue #31901
Workaround is used for all future emacs versions, until known-working release will be available. It can be bad for performance if mpv becomes unresponsive.
Diffstat (limited to 'lisp/emms-player-mpv.el')
-rw-r--r--lisp/emms-player-mpv.el33
1 files changed, 22 insertions, 11 deletions
diff --git a/lisp/emms-player-mpv.el b/lisp/emms-player-mpv.el
index 8c4aa66..1dc92d5 100644
--- a/lisp/emms-player-mpv.el
+++ b/lisp/emms-player-mpv.el
@@ -237,6 +237,12 @@ to indicate that playback should stop instead of switching to next track.")
"Delay before issuing `emms-player-stopped' when mpv unexpectedly goes idle.")
+(defvar emms-player-mpv-ipc-conn-emacs-26-workaround (> emacs-major-version 26)
+ "Non-nil to enable workaround for issue #31901 in emacs 26.0-26.1 and possibly later versions.
+These seem to fail to call sentinel function for unix socket network processes
+that were started with :nowait t, so blocking connections are used there instead.")
+
+
;; ----- helpers
(defvar emms-player-mpv-debug nil
@@ -447,17 +453,22 @@ MEDIA-ARGS are used instead of --idle, if specified."
so it can be rescheduled further until function runs out of DELAYS values.
Sets `emms-player-mpv-ipc-proc' value to resulting process on success."
(emms-player-mpv-debug-msg "ipc: connect-delay %s" (car delays))
- (setq emms-player-mpv-ipc-proc
- (make-network-process
- :name "emms-player-mpv-ipc"
- :family 'local
- :service emms-player-mpv-ipc-socket
- :nowait t
- :coding '(utf-8 . utf-8)
- :buffer (get-buffer-create emms-player-mpv-ipc-buffer)
- :noquery t
- :filter #'emms-player-mpv-ipc-filter
- :sentinel #'emms-player-mpv-ipc-sentinel))
+ (let ((use-nowait (not emms-player-mpv-ipc-conn-emacs-26-workaround)))
+ (setq emms-player-mpv-ipc-proc
+ (condition-case nil
+ (make-network-process
+ :name "emms-player-mpv-ipc"
+ :family 'local
+ :service emms-player-mpv-ipc-socket
+ :nowait use-nowait
+ :coding '(utf-8 . utf-8)
+ :buffer (get-buffer-create emms-player-mpv-ipc-buffer)
+ :noquery t
+ :filter #'emms-player-mpv-ipc-filter
+ :sentinel #'emms-player-mpv-ipc-sentinel)
+ (file-error nil)))
+ (when (and emms-player-mpv-ipc-proc (not use-nowait))
+ (emms-player-mpv-ipc-sentinel emms-player-mpv-ipc-proc 'open)))
(when (and (not emms-player-mpv-ipc-proc)
delays)
(run-at-time (car delays)