summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPo Lu <luangruo@yahoo.com>2022-12-24 14:14:51 +0800
committerPo Lu <luangruo@yahoo.com>2022-12-24 14:15:04 +0800
commit0e39ad6fa56d50b4710157f0b6f396e492da0dfb (patch)
treeda03af2bd794e7a54cfed61213f737fd9c0dce87
parent9a3b08061feea14d6f37685ca1ab8801758bfd1c (diff)
downloademacs-0e39ad6fa56.tar.gz
Fix crash after X error
* src/xdisp.c (redisplay_internal): Catch another crash if gcscrollbars after an X error.
-rw-r--r--src/xdisp.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/src/xdisp.c b/src/xdisp.c
index 06c8b7730cd..4e5250486f5 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -16838,6 +16838,13 @@ redisplay_internal (void)
/* Only GC scrollbars when we redisplay the whole frame. */
= f->redisplay || !REDISPLAY_SOME_P ();
bool f_redisplay_flag = f->redisplay;
+
+ /* The X error handler may have deleted that frame
+ before we went back to retry_frame. This must come
+ before any accesses to f->terminal. */
+ if (!FRAME_LIVE_P (f))
+ continue;
+
/* Mark all the scroll bars to be removed; we'll redeem
the ones we want when we redisplay their windows. */
if (gcscrollbars && FRAME_TERMINAL (f)->condemn_scroll_bars_hook)
@@ -16845,7 +16852,6 @@ redisplay_internal (void)
if (FRAME_VISIBLE_P (f) && !FRAME_OBSCURED_P (f))
{
-
/* Don't allow freeing images and faces for this
frame as long as the frame's update wasn't
completed. This prevents crashes when some Lisp
@@ -16861,10 +16867,6 @@ redisplay_internal (void)
else if (!REDISPLAY_SOME_P ())
f->redisplay = true;
- /* 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 (gcscrollbars && FRAME_TERMINAL (f)->judge_scroll_bars_hook)