(redisplay_internal): Check that the frame is still
authorAndreas Schwab <schwab@linux-m68k.org>
Thu, 18 Jun 2009 09:49:05 +0000 (09:49 +0000)
committerAndreas Schwab <schwab@linux-m68k.org>
Thu, 18 Jun 2009 09:49:05 +0000 (09:49 +0000)
live after redisplay of its windows.
(redisplay_windows): Check that the window is still live.

src/ChangeLog
src/xdisp.c

index 21803be..a0bb104 100644 (file)
@@ -1,3 +1,9 @@
+2009-06-18  Andreas Schwab  <aschwab@redhat.com>
+
+       * xdisp.c (redisplay_internal): Check that the frame is still
+       live after redisplay of its windows.
+       (redisplay_windows): Check that the window is still live.
+
 2009-06-17  Andreas Schwab  <schwab@linux-m68k.org>
 
        * coding.c (detect_coding_utf_16): Fix previous change.
index dd2c871..8094b8f 100644 (file)
@@ -11838,6 +11838,10 @@ redisplay_internal (preserve_echo_area)
              if (FRAME_VISIBLE_P (f) && !FRAME_OBSCURED_P (f))
                redisplay_windows (FRAME_ROOT_WINDOW (f));
 
+             /* The X error handler may have deleted that frame.  */
+             if (!FRAME_LIVE_P (f))
+               continue;
+
              /* Any scroll bars which redisplay_windows should have
                 nuked should now go away.  */
              if (FRAME_TERMINAL (f)->judge_scroll_bars_hook)
@@ -12255,7 +12259,7 @@ redisplay_windows (window)
        redisplay_windows (w->hchild);
       else if (!NILP (w->vchild))
        redisplay_windows (w->vchild);
-      else
+      else if (!NILP (w->buffer))
        {
          displayed_buffer = XBUFFER (w->buffer);
          /* Use list_of_error, not Qerror, so that