Kai Ma <justksqsf@gmail.com> writes: > 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. */ I will install a change using internal_catch_all instead, if Stefan is fine with that. By doing so, you get all of the benefits of safe_call and inhibit_quit, and it also protects against faulty code that changes the value of inhibit-quit inside the Lisp function.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4