emacs-diffs
[Top][All Lists]
Advanced

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

master 9838f786ded: When waiting for processes in Eshell, wait until all


From: Jim Porter
Subject: master 9838f786ded: When waiting for processes in Eshell, wait until all the I/O is complete
Date: Wed, 13 Sep 2023 16:39:11 -0400 (EDT)

branch: master
commit 9838f786ded35fe49bbe84dd78af84df1337adbf
Author: Jim Porter <jporterbugs@gmail.com>
Commit: Jim Porter <jporterbugs@gmail.com>

    When waiting for processes in Eshell, wait until all the I/O is complete
    
    This should fix bug#59103, bug#65590, and bug#65601.
    
    * lisp/eshell/esh-proc.el (eshell-sentinel): Set ':eshell-handles' to
    nil when finished with I/O.
    (eshell-wait-for-process): Wait until ':eshell-handles' is nil.
---
 lisp/eshell/esh-proc.el | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/lisp/eshell/esh-proc.el b/lisp/eshell/esh-proc.el
index 5df68947ec2..afd0ed80132 100644
--- a/lisp/eshell/esh-proc.el
+++ b/lisp/eshell/esh-proc.el
@@ -161,7 +161,11 @@ The signals which will cause this to happen are matched by
   "Wait until PROCS have successfully completed."
   (dolist (proc procs)
     (when (eshell-processp proc)
-      (while (process-live-p proc)
+      (while (or (process-live-p proc)
+                 ;; If we have handles, this is an Eshell-managed
+                 ;; process.  Wait until we're 100% done and have
+                 ;; cleared out the handles (see `eshell-sentinel').
+                 (process-get proc :eshell-handles))
         (when (input-pending-p)
           (discard-input))
         (sit-for eshell-process-wait-seconds
@@ -530,6 +534,9 @@ PROC is the process that's exiting.  STRING is the exit 
message."
                            status
                            (when status (list 'quote (= status 0)))
                            handles)
+                          ;; Clear the handles to mark that we're 100%
+                          ;; finished with the I/O for this process.
+                          (process-put proc :eshell-handles nil)
                           (eshell-debug-command
                            'process
                            (format-message



reply via email to

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