]> git.eshelyaron.com Git - emacs.git/commitdiff
Remember the value of read_process_output_max when process is created
authorDmitry Gutov <dmitry@gutov.dev>
Sat, 8 Jun 2024 23:51:47 +0000 (02:51 +0300)
committerEshel Yaron <me@eshelyaron.com>
Sun, 9 Jun 2024 09:52:10 +0000 (11:52 +0200)
* src/process.h (Lisp_Process): Add field readmax.

* src/process.c (read_process_output): Use it.
(create_process): Save the value of read_process_output_max to
it when the process is created (bug#66020).  Use for pipe size.

(cherry picked from commit 8cf6e311b87fabeba70d59647883a86c8c92b86f)

src/process.c
src/process.h

index 2e8dd758b3c838c0bd7acb4ec627657e16662de7..fd09bb98c60a5ede7df8be03f3fb44a531f35cc9 100644 (file)
@@ -2194,6 +2194,8 @@ create_process (Lisp_Object process, char **new_argv, Lisp_Object current_dir)
       outchannel = p->open_fd[WRITE_TO_SUBPROCESS];
     }
 
+  p->readmax = clip_to_bounds (1, read_process_output_max, INT_MAX);
+
   /* Set up stdout for the child process.  */
   if (ptychannel >= 0 && p->pty_out)
     {
@@ -2210,11 +2212,8 @@ create_process (Lisp_Object process, char **new_argv, Lisp_Object current_dir)
 #if defined(F_SETPIPE_SZ) && defined(F_GETPIPE_SZ)
       /* If they requested larger reads than the default system pipe
          capacity, try enlarging the capacity to match the request.  */
-      if (read_process_output_max > fcntl (inchannel, F_GETPIPE_SZ))
-       {
-         int readmax = clip_to_bounds (1, read_process_output_max, INT_MAX);
-         fcntl (inchannel, F_SETPIPE_SZ, readmax);
-       }
+      if (p->readmax > fcntl (inchannel, F_GETPIPE_SZ))
+       fcntl (inchannel, F_SETPIPE_SZ, p->readmax);
 #endif
     }
 
@@ -6171,7 +6170,7 @@ read_process_output (Lisp_Object proc, int channel)
   eassert (0 <= channel && channel < FD_SETSIZE);
   struct coding_system *coding = proc_decode_coding_system[channel];
   int carryover = p->decoding_carryover;
-  ptrdiff_t readmax = clip_to_bounds (1, read_process_output_max, PTRDIFF_MAX);
+  ptrdiff_t readmax = p->readmax;
   specpdl_ref count = SPECPDL_INDEX ();
   Lisp_Object odeactivate;
   char *chars;
index 3f56b087084e59f5182be2d8bf3a3af58fa95e7c..f497a64c3d1f3560a4ee9f39bd3f2d77c6cf2cc0 100644 (file)
@@ -153,6 +153,8 @@ struct Lisp_Process
     unsigned int adaptive_read_buffering : 2;
     /* Skip reading this process on next read.  */
     bool_bf read_output_skip : 1;
+    /* Maximum number of bytes to read in a single chunk. */
+    ptrdiff_t readmax;
     /* True means kill silently if Emacs is exited.
        This is the inverse of the `query-on-exit' flag.  */
     bool_bf kill_without_query : 1;