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 static void
tty_send_additional_strings (struct terminal *terminal, Lisp_Object sym) tty_send_additional_strings (struct terminal *terminal, Lisp_Object sym)
{ {
Lisp_Object lisp_terminal; /* Use only accessors like CDR_SAFE and assq_no_quit to avoid any
Lisp_Object extra_codes; 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; struct tty_display_info *tty = terminal->display_info.tty;
XSETTERMINAL (lisp_terminal, terminal); for (Lisp_Object extra_codes
for (extra_codes = Fterminal_parameter (lisp_terminal, sym); = CDR_SAFE (assq_no_quit (sym, terminal->param_alist));
CONSP (extra_codes); CONSP (extra_codes);
extra_codes = XCDR (extra_codes)) extra_codes = XCDR (extra_codes))
{ {