]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix setting the pipe capacity for subprocesses
authorEli Zaretskii <eliz@gnu.org>
Fri, 6 Oct 2023 05:31:59 +0000 (08:31 +0300)
committerEli Zaretskii <eliz@gnu.org>
Fri, 6 Oct 2023 05:31:59 +0000 (08:31 +0300)
* src/process.c (create_process) [F_SETPIPE_SZ]: Set the pipe
capacity only if the required read-process-max is larger than the
default capacity of the pipe.  (Bug#66288)

src/process.c

index 67d1d3e425f45cff95dd3a73138b64012f82e8a1..5f7408a939513e3e6696150c2231e0ebbe660288 100644 (file)
@@ -2189,8 +2189,14 @@ create_process (Lisp_Object process, char **new_argv, Lisp_Object current_dir)
       inchannel = p->open_fd[READ_FROM_SUBPROCESS];
       forkout = p->open_fd[SUBPROCESS_STDOUT];
 
-#if defined(GNU_LINUX) && defined(F_SETPIPE_SZ)
-      fcntl (inchannel, F_SETPIPE_SZ, read_process_output_max);
+#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);
+       }
 #endif
     }