aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPo Lu2022-07-02 21:21:33 +0800
committerPo Lu2022-07-02 21:56:59 +0800
commit59d109b73c48ca41d240f1fbe10f7349e9df4e31 (patch)
treef564cd5f6cc7d56e2176c936b4d634f02ba520ef /src
parente0488f89d1712ce905f9040e6b26fdf0a4a0666d (diff)
downloademacs-59d109b73c48ca41d240f1fbe10f7349e9df4e31.tar.gz
emacs-59d109b73c48ca41d240f1fbe10f7349e9df4e31.zip
Fix display disconnect when tooltip frame is alive
* src/xterm.c (x_connection_closed): Don't dereference nil when loop finds a tooltip frame.
Diffstat (limited to 'src')
-rw-r--r--src/xterm.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/src/xterm.c b/src/xterm.c
index 2629997f2ac..0c695324f3b 100644
--- a/src/xterm.c
+++ b/src/xterm.c
@@ -23280,6 +23280,7 @@ x_connection_closed (Display *dpy, const char *error_message, bool ioerror)
23280 Emacs_XIOErrorHandler io_error_handler; 23280 Emacs_XIOErrorHandler io_error_handler;
23281 xm_drop_start_message dmsg; 23281 xm_drop_start_message dmsg;
23282 struct frame *f; 23282 struct frame *f;
23283 Lisp_Object minibuf_frame, tmp;
23283 23284
23284 dpyinfo = x_display_info_for_display (dpy); 23285 dpyinfo = x_display_info_for_display (dpy);
23285 error_msg = alloca (strlen (error_message) + 1); 23286 error_msg = alloca (strlen (error_message) + 1);
@@ -23379,9 +23380,14 @@ x_connection_closed (Display *dpy, const char *error_message, bool ioerror)
23379 that are on the dead display. */ 23380 that are on the dead display. */
23380 FOR_EACH_FRAME (tail, frame) 23381 FOR_EACH_FRAME (tail, frame)
23381 { 23382 {
23382 Lisp_Object minibuf_frame; 23383 /* Tooltip frames don't have these, so avoid crashing. */
23384
23385 if (FRAME_TOOLTIP_P (XFRAME (frame)))
23386 continue;
23387
23383 minibuf_frame 23388 minibuf_frame
23384 = WINDOW_FRAME (XWINDOW (FRAME_MINIBUF_WINDOW (XFRAME (frame)))); 23389 = WINDOW_FRAME (XWINDOW (FRAME_MINIBUF_WINDOW (XFRAME (frame))));
23390
23385 if (FRAME_X_P (XFRAME (frame)) 23391 if (FRAME_X_P (XFRAME (frame))
23386 && FRAME_X_P (XFRAME (minibuf_frame)) 23392 && FRAME_X_P (XFRAME (minibuf_frame))
23387 && ! EQ (frame, minibuf_frame) 23393 && ! EQ (frame, minibuf_frame)
@@ -23432,11 +23438,8 @@ For details, see etc/PROBLEMS.\n",
23432 /* We have just closed all frames on this display. */ 23438 /* We have just closed all frames on this display. */
23433 emacs_abort (); 23439 emacs_abort ();
23434 23440
23435 { 23441 XSETTERMINAL (tmp, dpyinfo->terminal);
23436 Lisp_Object tmp; 23442 Fdelete_terminal (tmp, Qnoelisp);
23437 XSETTERMINAL (tmp, dpyinfo->terminal);
23438 Fdelete_terminal (tmp, Qnoelisp);
23439 }
23440 } 23443 }
23441 23444
23442 unblock_input (); 23445 unblock_input ();