Avoid crash with C-g C-g in GC

Problem reported by Richard Stallman (Bug#17406).
Based on fix suggested by Eli Zaretskii (Bug#28279#16).
* src/term.c (tty_send_additional_strings):
Use only safe accessors, to avoid crash when C-g C-g in GC.
This commit is contained in:
Paul Eggert 2017-09-17 22:01:56 -07:00
parent 541006c536
commit 059184e645

View file

@ -155,12 +155,16 @@ tty_ring_bell (struct frame *f)
static void
tty_send_additional_strings (struct terminal *terminal, Lisp_Object sym)
{
Lisp_Object lisp_terminal;
Lisp_Object extra_codes;
/* Use only accessors like CDR_SAFE and assq_no_quit to avoid any
form of quitting or signaling an error, since this function can
run as part of the "emergency escape" procedure invoked in the
middle of GC, where quitting means crashing (Bug#17406). */
if (! terminal->name)
return;
struct tty_display_info *tty = terminal->display_info.tty;
XSETTERMINAL (lisp_terminal, terminal);
for (extra_codes = Fterminal_parameter (lisp_terminal, sym);
for (Lisp_Object extra_codes
= CDR_SAFE (assq_no_quit (sym, terminal->param_alist));
CONSP (extra_codes);
extra_codes = XCDR (extra_codes))
{