diff options
author | Po Lu <luangruo@yahoo.com> | 2022-12-24 14:14:51 +0800 |
---|---|---|
committer | Po Lu <luangruo@yahoo.com> | 2022-12-24 14:15:04 +0800 |
commit | 0e39ad6fa56d50b4710157f0b6f396e492da0dfb (patch) | |
tree | da03af2bd794e7a54cfed61213f737fd9c0dce87 /src | |
parent | 9a3b08061feea14d6f37685ca1ab8801758bfd1c (diff) | |
download | emacs-0e39ad6fa56d50b4710157f0b6f396e492da0dfb.tar.gz emacs-0e39ad6fa56d50b4710157f0b6f396e492da0dfb.tar.bz2 emacs-0e39ad6fa56d50b4710157f0b6f396e492da0dfb.zip |
Fix crash after X error
* src/xdisp.c (redisplay_internal): Catch another crash if
gcscrollbars after an X error.
Diffstat (limited to 'src')
-rw-r--r-- | src/xdisp.c | 12 |
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) |