]> git.eshelyaron.com Git - emacs.git/commitdiff
Avoid crash with C-g C-g in GC
authorPaul Eggert <eggert@cs.ucla.edu>
Mon, 18 Sep 2017 05:01:56 +0000 (22:01 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Mon, 18 Sep 2017 05:03:00 +0000 (22:03 -0700)
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.

src/term.c

index a2ae8c2c6f078ff323322ba1ea0159eec1119697..065bce45d3cbb0558880719bcb6255e5f335a476 100644 (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))
     {