emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] master ed65ea1: Speed up reading sub-process output on MS-


From: Eli Zaretskii
Subject: [Emacs-diffs] master ed65ea1: Speed up reading sub-process output on MS-Windows
Date: Sat, 30 Jun 2018 04:45:01 -0400 (EDT)

branch: master
commit ed65ea18152636500399a7b6b75c87bac7d4ef2b
Author: Eli Zaretskii <address@hidden>
Commit: Eli Zaretskii <address@hidden>

    Speed up reading sub-process output on MS-Windows
    
    * src/w32proc.c (syms_of_ntproc) <w32-pipe-read-delay>: Set to
    zero.  For the details, see this discussion:
    http://lists.gnu.org/archive/html/emacs-devel/2018-06/msg00711.html.
    * src/w32.c (_sys_read_ahead): Update the commentary for
    w32-pipe-read-delay usage.
    
    * doc/emacs/msdos.texi (Windows Processes): Document
    w32-pipe-read-delay.
    
    * etc/NEWS: Mention the change of the value of w32-pipe-read-delay.
---
 doc/emacs/msdos.texi |  7 +++++++
 etc/NEWS             | 11 +++++++++++
 src/w32.c            | 15 ++++++++-------
 src/w32proc.c        | 15 +++++++++------
 4 files changed, 35 insertions(+), 13 deletions(-)

diff --git a/doc/emacs/msdos.texi b/doc/emacs/msdos.texi
index 679bdd3..c69c7d3 100644
--- a/doc/emacs/msdos.texi
+++ b/doc/emacs/msdos.texi
@@ -808,6 +808,13 @@ communications with subprocesses to programs that exhibit 
unusual
 behavior with respect to buffering pipe I/O.
 
 @ifnottex
address@hidden w32-pipe-read-delay
+  If you need to invoke MS-DOS programs as Emacs subprocesses, you may
+see low rate of reading data from such programs.  Setting the variable
address@hidden to a non-zero value may improve throughput
+in these cases; we suggest the value of 50 for such situations.  The
+default is zero.
+
 @findex w32-shell-execute
   The function @code{w32-shell-execute} can be useful for writing
 customized commands that run MS-Windows applications registered to
diff --git a/etc/NEWS b/etc/NEWS
index eb9169a..f5332c0 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -851,6 +851,17 @@ retrieving values stored under a given key.  It is 
intended to be used
 for supporting features such as XDG-like location of important files
 and directories.
 
++++
+** The default value of 'w32-pipe-read-delay' is now zero.
+This speeds up reading output from sub-processes that produce a lot of
+data.
+
+This variable may need to be non-zero only when running DOS programs
+as Emacs subprocesses, which by now is not supported on modern
+versions of MS-Windows.  Set this variable to 50 if for some reason
+you need the old behavior (and please report such situations to Emacs
+developers).
+
 
 ----------------------------------------------------------------------
 This file is part of GNU Emacs.
diff --git a/src/w32.c b/src/w32.c
index e93aaab..c848b33 100644
--- a/src/w32.c
+++ b/src/w32.c
@@ -8469,13 +8469,14 @@ _sys_read_ahead (int fd)
     {
       rc = _read (fd, &cp->chr, sizeof (char));
 
-      /* Give subprocess time to buffer some more output for us before
-        reporting that input is available; we need this because Windows 95
-        connects DOS programs to pipes by making the pipe appear to be
-        the normal console stdout - as a result most DOS programs will
-        write to stdout without buffering, ie. one character at a
-        time.  Even some W32 programs do this - "dir" in a command
-        shell on NT is very slow if we don't do this. */
+      /* Optionally give subprocess time to buffer some more output
+        for us before reporting that input is available; we may need
+        this because Windows 9X connects DOS programs to pipes by
+        making the pipe appear to be the normal console stdout -- as
+        a result most DOS programs will write to stdout without
+        buffering, i.e., one character at a time.  Even some W32
+        programs do this -- "dir" in a command shell on NT is very
+        slow if we don't do this.  */
       if (rc > 0)
        {
          int wait = w32_pipe_read_delay;
diff --git a/src/w32proc.c b/src/w32proc.c
index 28d7b66..5934669 100644
--- a/src/w32proc.c
+++ b/src/w32proc.c
@@ -3763,14 +3763,17 @@ them blocking when trying to access unmounted drives 
etc.  */);
 
   DEFVAR_INT ("w32-pipe-read-delay", w32_pipe_read_delay,
              doc: /* Forced delay before reading subprocess output.
-This is done to improve the buffering of subprocess output, by
-avoiding the inefficiency of frequently reading small amounts of data.
+This may need to be done to improve the buffering of subprocess output,
+by avoiding the inefficiency of frequently reading small amounts of data.
+Typically needed only with DOS programs on Windows 9X; set to 50 if
+throughput with such programs is slow.
 
 If positive, the value is the number of milliseconds to sleep before
-reading the subprocess output.  If negative, the magnitude is the number
-of time slices to wait (effectively boosting the priority of the child
-process temporarily).  A value of zero disables waiting entirely.  */);
-  w32_pipe_read_delay = 50;
+signaling that output from a subprocess is ready to be read.
+If negative, the value is the number of time slices to wait (effectively
+boosting the priority of the child process temporarily).
+A value of zero disables waiting entirely.  */);
+  w32_pipe_read_delay = 0;
 
   DEFVAR_INT ("w32-pipe-buffer-size", w32_pipe_buffer_size,
              doc: /* Size of buffer for pipes created to communicate with 
subprocesses.



reply via email to

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