emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/exwm 6eaa0301f1 04/10: Correctly stop the subordinate E


From: Adrián Medraño Calvo
Subject: [elpa] externals/exwm 6eaa0301f1 04/10: Correctly stop the subordinate Emacs daemon
Date: Mon, 8 Jan 2024 11:05:45 -0500 (EST)

branch: externals/exwm
commit 6eaa0301f17898449827c778d52456800f776e65
Author: Steven Allen <steven@stebalien.com>
Commit: Steven Allen <steven@stebalien.com>

    Correctly stop the subordinate Emacs daemon
    
    This patch starts Emacs as a foreground daemon (so it can accurately be
    killed) and terminates it by sending a signal (because
    'server-force-delete' stops the local server, not the named server).
    
    * exwm.el (exwm--server-timeout): The time to politely wait for the
    subordinate server to exit before killing it.
    (exwm--server-stop): Send SIGTERM to the subordinate process instead of
    using 'server-force-delete'.
    (exwm--server-eval-at): Prevent Emacs from forking so we can manage it
    as a subprocess.
---
 exwm.el | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

diff --git a/exwm.el b/exwm.el
index 5745533720..5e8489fee6 100644
--- a/exwm.el
+++ b/exwm.el
@@ -5,7 +5,7 @@
 ;; Author: Chris Feng <chris.w.feng@gmail.com>
 ;; Maintainer: Adrián Medraño Calvo <adrian@medranocalvo.com>
 ;; Version: 0.28
-;; Package-Requires: ((xelb "0.18"))
+;; Package-Requires: ((emacs "26.1") (xelb "0.18"))
 ;; Keywords: unix
 ;; URL: https://github.com/ch11ng/exwm
 
@@ -110,6 +110,9 @@
 (defconst exwm--server-name "server-exwm"
   "Name of the subordinate Emacs server.")
 
+(defvar exwm--server-timeout 1
+  "Number of seconds to wait for the subordinate Emacs server to exit before 
killing it.")
+
 (defvar exwm--server-process nil "Process of the subordinate Emacs server.")
 
 (defun exwm-reset ()
@@ -999,8 +1002,13 @@ FRAME, if given, indicates the X display EXWM should 
manage."
 (defun exwm--server-stop ()
   "Stop the subordinate Emacs server."
   (exwm--log)
-  (server-force-delete exwm--server-name)
   (when exwm--server-process
+    (when (process-live-p exwm--server-process)
+      (cl-loop
+       initially (signal-process exwm--server-process 'TERM)
+       while     (process-live-p exwm--server-process)
+       repeat    (* 10 exwm--server-timeout)
+       do        (sit-for 0.1)))
     (delete-process exwm--server-process)
     (setq exwm--server-process nil)))
 
@@ -1017,7 +1025,7 @@ FUNCTION is the function to be evaluated, ARGS are the 
arguments."
                          (car command-line-args) ;The executable file
                          "-d" (frame-parameter nil 'display)
                          "-Q"
-                         (concat "--daemon=" exwm--server-name)
+                         (concat "--fg-daemon=" exwm--server-name)
                          "--eval"
                          ;; Create an invisible frame
                          "(make-frame '((window-system . x) (visibility)))"))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]