On Nov 4, 2022, at 23:09, Stefan Monnier <monnier@iro.umontreal.ca> wrote:

I'm glad we found a way to make the code work, apparently, but
Here we need a comment explaining why we do this gymnastic of
`safe_call` + `inhibit_quit` + `waiting_for_input`.
It's very unusual to have to do that.

Thanks for the pointer, this indeed turned out unnecessary (and dangerous).

A tester informed me of a problem in the v3 patch:

  safe_call (0, Qns_in_echo_area)

is incorrect. The 0 should be 1, or nargs will be -1 for funcall_general.  
This will cause an error to be signaled, which explains why 
`waiting_for_input` has to be masked.

[ I guess we could add an assertion that numargs >= 0 in funcall_general or
  somewhere else? ]

This patch should be correct even without the ugly `waiting_for_input` hack.
I’ve been running patched Emacs for some time without issues.

With the current understanding of the bug, I guess the comment line could be
  /* Protect against throw-on-input. */

WDYT?