Subject: 27.0.50; Trivial errors in process filters can render Emacs unusable

From: Lars Ingebrigtsen <[email-masked]>
Date: Sat, 02 Nov 2019 18:53:57 +0100

If you eval the following, your Emacs will become unusable and you'll
have to kill it (so don't eval it):

(let ((process (start-process
		"foo" (get-buffer-create "*foo*")
		"bash" "-c" "while true; do echo foo; sleep 1; done")))
  (set-process-filter
   process
   (lambda (&rest _)
     (error))))

The reason for this is that when signalling an error from a process
filter, Emacs messages the error message and then seems to sleep for a
second?  I haven't investigated the code yet.

This is something that has bit me more than a few times when working
with process filters (i.e., making a syntax error and then having Emacs
blow up on me).

I'm not sure what solution would be best.  I see two obvious things we
could do: Remove the process filter, so that it doesn't trigger again.
Or -- remove the one-second sleep, which would allow the user to `M-x
list-processes' and kill the offending process.

In GNU Emacs 27.0.50 (build 6, x86_64-pc-linux-gnu, GTK+ Version 3.24.5)
 of 2019-11-01 built on marnie
Repository revision: eda98211e31ed969823c1048b3cde635e08eebe5
Repository branch: master
Windowing system distributor 'The X.Org Foundation', version 11.0.12004000
System Description: Debian GNU/Linux 10 (buster)

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no