changeset 72276:b3b5d904f956

* keyboard.c (read_char): Rebalance specpdl after receiving jump.
author Chong Yidong <cyd@stupidchicken.com>
date Sat, 05 Aug 2006 01:38:21 +0000
parents eb0b545cf8c7
children a6b9ee835f88
files src/ChangeLog src/keyboard.c
diffstat 2 files changed, 9 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/ChangeLog	Fri Aug 04 17:22:18 2006 +0000
+++ b/src/ChangeLog	Sat Aug 05 01:38:21 2006 +0000
@@ -1,3 +1,9 @@
+2006-08-04  Chong Yidong  <cyd@stupidchicken.com>
+
+	* keyboard.c (read_char): Rebalance specpdl after receiving jump.
+
+	* process.c: Reapply 2006-08-01 change.
+
 2006-08-04  Eli Zaretskii  <eliz@gnu.org>
 
 	* w32fns.c (w32_query_font): Fix last change: use stricmp.
--- a/src/keyboard.c	Fri Aug 04 17:22:18 2006 +0000
+++ b/src/keyboard.c	Sat Aug 05 01:38:21 2006 +0000
@@ -2403,7 +2403,7 @@
      EMACS_TIME *end_time;
 {
   volatile Lisp_Object c;
-  int count;
+  int count, jmpcount;
   jmp_buf local_getcjmp;
   jmp_buf save_jump;
   volatile int key_already_recorded = 0;
@@ -2629,11 +2629,13 @@
      around any call to sit_for or kbd_buffer_get_event;
      it *must not* be in effect when we call redisplay.  */
 
+  jmpcount = SPECPDL_INDEX ();
   if (_setjmp (local_getcjmp))
     {
       /* We must have saved the outer value of getcjmp here,
 	 so restore it now.  */
       restore_getcjmp (save_jump);
+      unbind_to (jmpcount, Qnil);
       XSETINT (c, quit_char);
       internal_last_event_frame = selected_frame;
       Vlast_event_frame = internal_last_event_frame;