diff options
| author | Po Lu | 2022-07-02 21:21:33 +0800 |
|---|---|---|
| committer | Po Lu | 2022-07-02 21:56:59 +0800 |
| commit | 59d109b73c48ca41d240f1fbe10f7349e9df4e31 (patch) | |
| tree | f564cd5f6cc7d56e2176c936b4d634f02ba520ef /src | |
| parent | e0488f89d1712ce905f9040e6b26fdf0a4a0666d (diff) | |
| download | emacs-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.c | 15 |
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 (); |