summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/lispref/processes.texi4
-rw-r--r--etc/NEWS3
-rw-r--r--src/process.c17
-rw-r--r--test/src/process-tests.el9
4 files changed, 26 insertions, 7 deletions
diff --git a/doc/lispref/processes.texi b/doc/lispref/processes.texi
index 6be311b5639..43009b35b2a 100644
--- a/doc/lispref/processes.texi
+++ b/doc/lispref/processes.texi
@@ -678,7 +678,9 @@ Initialize the process query flag to @var{query-flag}.
@xref{Query Before Exit}.
@item :stop @var{stopped}
-If @var{stopped} is non-@code{nil}, start the process in the
+@var{stopped} must be @code{nil}. The @code{:stop} key is ignored
+otherwise and is retained for compatibility with other process types
+such as pipe processes. Asynchronous subprocesses never start in the
stopped state.
@item :filter @var{filter}
diff --git a/etc/NEWS b/etc/NEWS
index 3e3454bd939..4d76143b134 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -1515,6 +1515,9 @@ The global value of 'indent-line-function', which defaults to
To get back the old behavior, add a function to 'text-mode-hook' which
performs (setq-local indent-line-function #'indent-relative).
+** 'make-process' no longer accepts a non-nil ':stop' key. This has
+never worked reliably, and now causes an error.
+
* Lisp Changes in Emacs 27.1
diff --git a/src/process.c b/src/process.c
index 0c440371628..6717ccb4187 100644
--- a/src/process.c
+++ b/src/process.c
@@ -1643,10 +1643,11 @@ ENCODING is used for writing.
:noquery BOOL -- When exiting Emacs, query the user if BOOL is nil and
the process is running. If BOOL is not given, query before exiting.
-:stop BOOL -- Start process in the `stopped' state if BOOL non-nil.
-In the stopped state, a process does not accept incoming data, but you
-can send outgoing data. The stopped state is cleared by
-`continue-process' and set by `stop-process'.
+:stop BOOL -- BOOL must be nil. The `:stop' key is ignored otherwise
+and is retained for compatibility with other process types such as
+pipe processes. Asynchronous subprocesses never start in the
+`stopped' state. Use `stop-process' and `continue-process' to send
+signals to stop and continue a process.
:connection-type TYPE -- TYPE is control type of device used to
communicate with subprocesses. Values are `pipe' to use a pipe, `pty'
@@ -1746,8 +1747,10 @@ usage: (make-process &rest ARGS) */)
if (!query_on_exit)
XPROCESS (proc)->kill_without_query = 1;
- if (tem = Fplist_get (contact, QCstop), !NILP (tem))
- pset_command (XPROCESS (proc), Qt);
+ tem = Fplist_get (contact, QCstop);
+ /* Normal processes can't be started in a stopped state, see
+ Bug#30460. */
+ CHECK_TYPE (NILP (tem), Qnull, tem);
tem = Fplist_get (contact, QCconnection_type);
if (EQ (tem, Qpty))
@@ -8300,6 +8303,8 @@ returns non-`nil'. */);
"internal-default-interrupt-process");
DEFSYM (Qinterrupt_process_functions, "interrupt-process-functions");
+ DEFSYM (Qnull, "null");
+
defsubr (&Sprocessp);
defsubr (&Sget_process);
defsubr (&Sdelete_process);
diff --git a/test/src/process-tests.el b/test/src/process-tests.el
index 0bb7ebe50a8..b853f77946d 100644
--- a/test/src/process-tests.el
+++ b/test/src/process-tests.el
@@ -284,5 +284,14 @@ file name handler."
(put #'process-tests--file-handler 'operations
'(unhandled-file-name-directory make-process))
+(ert-deftest make-process/stop ()
+ "Check that `make-process' doesn't accept a `:stop' key.
+See Bug#30460."
+ (should-error
+ (make-process :name "test"
+ :command (list (expand-file-name invocation-name
+ invocation-directory))
+ :stop t)))
+
(provide 'process-tests)
;; process-tests.el ends here.