From 9c2b11484f8a5a07c748a18a872947c5c062883b Mon Sep 17 00:00:00 2001 From: Philipp Stephani Date: Mon, 8 Jan 2018 21:51:44 +0100 Subject: [PATCH] Inherit query-on-exit flag to stderr process (Bug#30031) * src/process.c (Fmake_process): Have the pipe process honor the parent's query-on-exit flag. * test/src/process-tests.el (make-process/noquery-stderr): New test. --- src/process.c | 8 ++++++-- test/src/process-tests.el | 19 +++++++++++++++++++ 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/src/process.c b/src/process.c index 94d9f8c6a5c..36fb8a70cf1 100644 --- a/src/process.c +++ b/src/process.c @@ -1686,6 +1686,8 @@ usage: (make-process &rest ARGS) */) if (!NILP (program)) CHECK_STRING (program); + bool query_on_exit = NILP (Fplist_get (contact, QCnoquery)); + stderrproc = Qnil; xstderr = Fplist_get (contact, QCstderr); if (PROCESSP (xstderr)) @@ -1701,7 +1703,9 @@ usage: (make-process &rest ARGS) */) QCname, concat2 (name, build_string (" stderr")), QCbuffer, - Fget_buffer_create (xstderr)); + Fget_buffer_create (xstderr), + QCnoquery, + query_on_exit ? Qnil : Qt); } proc = make_process (name); @@ -1715,7 +1719,7 @@ usage: (make-process &rest ARGS) */) pset_filter (XPROCESS (proc), Fplist_get (contact, QCfilter)); pset_command (XPROCESS (proc), Fcopy_sequence (command)); - if (tem = Fplist_get (contact, QCnoquery), !NILP (tem)) + if (!query_on_exit) XPROCESS (proc)->kill_without_query = 1; if (tem = Fplist_get (contact, QCstop), !NILP (tem)) pset_command (XPROCESS (proc), Qt); diff --git a/test/src/process-tests.el b/test/src/process-tests.el index 34309a5817d..7d355602297 100644 --- a/test/src/process-tests.el +++ b/test/src/process-tests.el @@ -162,5 +162,24 @@ (error nil)))) (should (equal path samepath)))) +(ert-deftest make-process/noquery-stderr () + "Checks that Bug#30031 is fixed." + (skip-unless (executable-find "sleep")) + (with-temp-buffer + (let* ((previous-processes (process-list)) + (process (make-process :name "sleep" + :command '("sleep" "1h") + :noquery t + :connection-type 'pipe + :stderr (current-buffer)))) + (unwind-protect + (let ((new-processes (cl-set-difference (process-list) + previous-processes + :test #'eq))) + (should new-processes) + (dolist (process new-processes) + (should-not (process-query-on-exit-flag process)))) + (kill-process process))))) + (provide 'process-tests) ;; process-tests.el ends here. -- 2.39.5