changeset 103473:ae2d84ad6135

(redisplay_internal): Check that the frame is still live after redisplay of its windows. (redisplay_windows): Check that the window is still live.
author Andreas Schwab <schwab@linux-m68k.org>
date Thu, 18 Jun 2009 09:49:05 +0000
parents 702e3f83e52f
children 7ead50363544
files src/ChangeLog src/xdisp.c
diffstat 2 files changed, 11 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/ChangeLog	Thu Jun 18 07:21:49 2009 +0000
+++ b/src/ChangeLog	Thu Jun 18 09:49:05 2009 +0000
@@ -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.
--- a/src/xdisp.c	Thu Jun 18 07:21:49 2009 +0000
+++ b/src/xdisp.c	Thu Jun 18 09:49:05 2009 +0000
@@ -11838,6 +11838,10 @@
 	      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 (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