summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEli Zaretskii <eliz@gnu.org>2023-10-06 08:31:59 +0300
committerEli Zaretskii <eliz@gnu.org>2023-10-06 08:31:59 +0300
commit1594d5f17ad9845be526381e6cd62313da41590a (patch)
treea5b0962cf54e13716c3580b078b00857cfef3e3b
parentaad8b5d78f306ac9ca0c03734524c9f49585bee8 (diff)
downloademacs-1594d5f17ad9845be526381e6cd62313da41590a.tar.gz
Fix setting the pipe capacity for subprocesses
* 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)
-rw-r--r--src/process.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/process.c b/src/process.c
index 67d1d3e425f..5f7408a9395 100644
--- a/src/process.c
+++ b/src/process.c
@@ -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
}