GNU bug report logs - #71475
30.0.50; crash in adjust_frame_glyphs (called by delete_frame)

Previous Next

Package: emacs;

Reported by: Daniel Clemente <n142857 <at> gmail.com>

Date: Mon, 10 Jun 2024 16:41:02 UTC

Severity: normal

Found in version 30.0.50

Done: Stefan Kangas <stefankangas <at> gmail.com>

Bug is archived. No further changes may be made.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 71475 in the body.
You can then email your comments to 71475 AT debbugs.gnu.org in the normal way.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to bug-gnu-emacs <at> gnu.org:
bug#71475; Package emacs. (Mon, 10 Jun 2024 16:41:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Daniel Clemente <n142857 <at> gmail.com>:
New bug report received and forwarded. Copy sent to bug-gnu-emacs <at> gnu.org. (Mon, 10 Jun 2024 16:41:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Daniel Clemente <n142857 <at> gmail.com>
To: bug-gnu-emacs <at> gnu.org
Subject: 30.0.50; crash in adjust_frame_glyphs (called by delete_frame)
Date: Mon, 10 Jun 2024 15:58:33 +0000
This is a continuation of bug 71224 and it may be a similar issue.
I'm using Emacs without X support but running it in an X terminal.
With glyph debug enabled. emacsclient, with -Q.

I was using the same reproduction procedure as in bug 71224. So I was
randomly mixing these 4 actions:
- call to (debug) to open a backtrace window
- call to (recurse) to cause an error
- open a new frame
- close a frame

In the beginning I was using this for-loop to cause more stress by
opening lots of frames, but I think it's not needed; the crash also
happened when I just had 2 manually opened frames.
for j in `seq 100`; do for i in `seq 10`; do urxvt -e emacsclient
'-nw' '-e' '(dired "~")' &; done; sleep 7 && killall emacsclient; done

Apparently we're in a case in which the frame's glyph matrix exists
but it has 0 rows, and adjust_frame_glyphs doesn't like that.

Backtraces+variables follow.

Lisp nesting exceeds ‘max-lisp-eval-depth’: 1622
Lisp nesting exceeds ‘max-lisp-eval-depth’: 1622

dispnew.c:1851: Emacs fatal error: assertion failed: FRAME_INITIAL_P
(f) || noninteractive || !initialized || (f->current_matrix &&
f->current_matrix->nrows > 0 && f->current_matrix->rows &&
f->desired_matrix && f->desired_matrix->nrows > 0 &&
f->desired_matrix->rows)

Breakpoint 1, terminate_due_to_signal (sig=6,
backtrace_limit=2147483647) at emacs.c:443
443      signal (sig, SIG_DFL);
(gdb) bt
#0  terminate_due_to_signal (sig=6, backtrace_limit=2147483647) at emacs.c:443
#1  0x0000555555735324 in die (
    msg=0x55555584e4e8 "FRAME_INITIAL_P (f) || noninteractive ||
!initialized || (f->current_matrix && f->current_matrix->nrows > 0 &&
f->current_matrix->rows && f->desired_matrix &&
f->desired_matrix->nrows > 0 && f->desire"..., file=0x55555584e231
"dispnew.c", line=1851) at alloc.c:8082
#2  0x0000555555589ecc in adjust_frame_glyphs (f=0x555556438e00) at
dispnew.c:1851
#3  0x0000555555617fe0 in apply_window_adjustment (w=0x5555564392b8)
at window.c:7848
#4  0x000055555560c18a in set_window_buffer
(window=XIL(0x5555564392bd), buffer=XIL(0x7ffff2090c65),
    run_hooks_p=false, keep_margins_p=false) at window.c:4189
#5  0x00005555556e157b in zip_minibuffer_stacks
(dest_window=XIL(0x555555fdd67d),
    source_window=XIL(0x5555564392bd)) at minibuf.c:185
#6  0x00005555556e16f2 in move_minibuffers_onto_frame
(of=0x555556438e00, frame=XIL(0x555555fdd1c5),
    for_deletion=true) at minibuf.c:209
#7  0x000055555559c8ca in delete_frame (frame=XIL(0x555556438e05),
force=XIL(0xc1e0)) at frame.c:2232
#8  0x000055555567814d in delete_terminal (terminal=0x55555649d9b0) at
terminal.c:333
#9  0x00005555556771f0 in delete_tty (terminal=0x55555649d9b0) at term.c:4697
#10 0x0000555555678435 in Fdelete_terminal
(terminal=XIL(0x55555649d9b5), force=XIL(0xc1e0))
    at terminal.c:398
#11 0x00005555556a0239 in gobble_input () at keyboard.c:7931
#12 0x0000555555697d62 in kbd_buffer_get_event (kbp=0x7fffffeff208,
used_mouse_menu=0x0,
    end_time=0x7fffffeff880) at keyboard.c:4036

(gdb) xbacktrace
"sit-for" (0xffeffa98)
"server--message-sit-for" (0xffeffc18)
"server-return-error" (0xffeffde0)
"server--process-filter-1" (0xfff00048)
"server--process-filter-all-pending" (0xfff001d0)
"server-process-filter" (0xfff00348)
"read--expression" (0xf0dff0a8)
"byte-code" (0xfff01d80)
"command-execute" (0xfff025e8)
"recursive-edit" (0xfff02a30)
"debug" (0xfff02bd8)
"eval-expression--debug" (0xfff02d78)
"recurse" (0xfff030e0)
"recurse" (0xfff03360)
"recurse" (0xfff035e0)
"recurse" (0xfff03860)
"recurse" (0xfff03ae0)

(gdb) frame 2
#2  0x0000555555589ecc in adjust_frame_glyphs (f=0x555556438e00) at
dispnew.c:1851
1851          eassert (FRAME_INITIAL_P (f)
(gdb) list
1846      if (FRAME_WINDOW_P (f))
1847        adjust_frame_glyphs_for_window_redisplay (f);
1848      else
1849        {
1850          adjust_frame_glyphs_for_frame_redisplay (f);
1851          eassert (FRAME_INITIAL_P (f)
1852               || noninteractive
1853               || !initialized
1854               || (f->current_matrix
1855               && f->current_matrix->nrows > 0
(gdb)
1856               && f->current_matrix->rows
1857               && f->desired_matrix
1858               && f->desired_matrix->nrows > 0
1859               && f->desired_matrix->rows));
1860        }
1861
1862      /* Don't forget the buffer for decode_mode_spec.  */
1863      adjust_decode_mode_spec_buffer (f);
1864
1865      f->glyphs_initialized_p = true;
(gdb) p FRAME_INITIAL_P(f)
$1 = 0
(gdb) p noninteractive
$2 = false
(gdb) p initialized
$1 = true
(gdb) p f->current_matrix
$3 = (struct glyph_matrix *) 0x55555645f0b0
(gdb) p f->current_matrix->nrows
$4 = 0
(gdb) p f->desired_matrix
$5 = (struct glyph_matrix *) 0x555556815870
(gdb) p f->desired_matrix->nrows
$6 = 0
(gdb)


(gdb) p* f
$8 = {
  header = {
    size = 4611686018595348501
  },
  name = XIL(0x555556428d14),
  icon_name = XIL(0),
  title = XIL(0),
  last_mouse_device = XIL(0),
  focus_frame = XIL(0),
  root_window = XIL(0x555556439025),
  selected_window = XIL(0x555556439025),
  old_selected_window = XIL(0),
  minibuffer_window = XIL(0x5555564392bd),
  param_alist = XIL(0x7ffff0935d63),
  scroll_bars = XIL(0),
  condemned_scroll_bars = XIL(0),
  menu_bar_items = XIL(0),
  face_hash_table = XIL(0x555556439555),
  menu_bar_vector = XIL(0),
  buffer_predicate = XIL(0),
  buffer_list = XIL(0x7ffff0935cf3),
  buried_buffer_list = XIL(0),
  tool_bar_position = XIL(0xfc00),
  tab_bar_items = XIL(0),
  tool_bar_items = XIL(0),
  face_cache = 0x55555656eac0,
  last_tab_bar_item = 0,
  menu_bar_items_used = 0,
  current_pool = 0x5555562588b0,
  desired_pool = 0x5555561acac0,
  desired_matrix = 0x555556815870,
  current_matrix = 0x55555645f0b0,
  glyphs_initialized_p = true,
  resized_p = false,
  default_face_done_p = false,
  already_hscrolled_p = false,
  updated_p = false,
  fonts_changed = false,
  cursor_type_changed = false,
  redisplay = true,
  visible = 1,
  iconified = false,
  garbaged = true,
  wants_modeline = true,
  auto_raise = false,
  auto_lower = false,
  no_split = false,
  explicit_name = false,
  window_change = true,
  window_state_change = false,
  mouse_moved = false,
  pointer_invisible = false,
  frozen_window_starts = false,
  output_method = output_termcap,
  can_set_window_size = false,
  after_make_frame = false,
  tab_bar_redisplayed = false,
  tab_bar_resized = false,
  tool_bar_redisplayed = false,
  tool_bar_resized = false,
  inhibit_horizontal_resize = false,
--Type <RET> for more, q to quit, c to continue without paging--
  inhibit_vertical_resize = false,
  face_change = true,
  inhibit_clear_image_cache = false,
  new_size_p = true,
  was_invisible = false,
  select_mini_window_flag = false,
  change_stamp = 1,
  number_of_windows = 0,
  tab_bar_lines = 0,
  tab_bar_height = 0,
  n_tab_bar_rows = 0,
  n_tab_bar_items = 0,
  tool_bar_lines = 0,
  tool_bar_height = 0,
  n_tool_bar_rows = 0,
  n_tool_bar_items = 0,
  decode_mode_spec_buffer = 0x5555563a32b0 "",
  insert_line_cost = 0x0,
  delete_line_cost = 0x0,
  insert_n_lines_cost = 0x0,
  delete_n_lines_cost = 0x0,
  text_cols = 80,
  text_lines = 24,
  text_width = 80,
  text_height = 24,
  total_cols = 80,
  total_lines = 25,
  pixel_width = 80,
  pixel_height = 25,
  new_width = 130,
  new_height = 54,
  left_pos = 0,
  top_pos = 0,
  win_gravity = 0,
  size_hint_flags = 0,
  border_width = 0,
  child_frame_border_width = 0,
  internal_border_width = 0,
  right_divider_width = 0,
  bottom_divider_width = 0,
  left_fringe_width = 0,
  right_fringe_width = 0,
  fringe_cols = 0,
  menu_bar_lines = 1,
  menu_bar_height = 1,
  column_width = 1,
  line_height = 1,
  terminal = 0x55555649d9b0,
  output_data = {
    tty = 0x555556384b90,
    x = 0x555556384b90,
    w32 = 0x555556384b90,
    ns = 0x555556384b90,
    pgtk = 0x555556384b90,
    haiku = 0x555556384b90,
    android = 0x555556384b90
  },
  font_driver_list = 0x0,
  desired_cursor = FILLED_BOX_CURSOR,
  cursor_width = 0,
  blink_off_cursor = FILLED_BOX_CURSOR,
--Type <RET> for more, q to quit, c to continue without paging--
  blink_off_cursor_width = 0,
  config_scroll_bar_width = 0,
  config_scroll_bar_cols = 0,
  config_scroll_bar_height = 0,
  config_scroll_bar_lines = 0,
  cost_calculation_baud_rate = 0,
  alpha = {0, 0},
  alpha_background = 0,
  gamma = 0,
  extra_line_spacing = 0,
  background_pixel = 18446744073709551613,
  foreground_pixel = 18446744073709551614
}
(gdb) p f->root_window
$9 = XIL(0x555556439025)
(gdb) p f->root_window->contents
There is no member named contents.
(gdb) p ((struct window*)f->root_window)->contents
$10 = XIL(0x7f)
(gdb) xpr
Lisp_Float
Cannot access memory at address 0x78
(gdb) p ((struct window*)f->selected_window)->contents
$11 = XIL(0x7f)
(gdb) xpr
Lisp_Float
Cannot access memory at address 0x78
(gdb)



In GNU Emacs 30.0.50 (build 8, x86_64-pc-linux-gnu) of 2024-06-09 built
 on sonn
Repository revision: 19806248167b9c4edaadbf4ed428a62fd8c5e412
Repository branch: master
System Description: Devuan GNU/Linux 5 (daedalus)

Configured using:
 'configure --prefix=/opt/dc/emacs/ --with-tiff=no --without-tiff
 --without-libsystemd --without-dbus --with-mailutils
 --with-native-compilation --with-x-toolkit=no --without-imagemagick
 --without-xft --without-harfbuzz --without-freetype --without-libotf
 --without-xwidgets --without-xpm --without-jpeg --without-gif
 --without-png --without-webp --without-rsvg --without-cairo --without-x
 --enable-checking=yes,glyphs 'CFLAGS=-g3 -O0''

Configured features:
GMP GNUTLS LCMS2 LIBSELINUX LIBXML2 MODULES NATIVE_COMP NOTIFY INOTIFY
PDUMPER SECCOMP SOUND SQLITE3 THREADS XIM ZLIB

Important settings:
  value of $LANG: en_US.UTF-8
  value of $XMODIFIERS: @im=SCIM
  locale-coding-system: utf-8-unix

Major mode: Dired by name

Minor modes in effect:
  server-mode: t
  tooltip-mode: t
  global-eldoc-mode: t
  show-paren-mode: t
  electric-indent-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  minibuffer-regexp-mode: t
  buffer-read-only: t
  line-number-mode: t
  indent-tabs-mode: t
  transient-mark-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t

Load-path shadows:
None found.

Features:
(shadow sort hashcash mail-extr compile comint ansi-osc ansi-color ring
tool-bar comp-run comp-common rx emacsbug message mailcap yank-media
puny rfc822 mml mml-sec password-cache epa derived epg rfc6068
epg-config gnus-util text-property-search time-date subr-x mm-decode
mm-bodies mm-encode mail-parse rfc2231 mailabbrev gmm-utils mailheader
sendmail rfc2047 rfc2045 ietf-drums mm-util mail-prsvr mail-utils pp
dired-aux cl-loaddefs cl-lib regexp-opt dired dnd dired-loaddefs
term/rxvt term/xterm xterm byte-opt gv bytecomp byte-compile server rmc
iso-transl tooltip cconv eldoc paren electric uniquify ediff-hook
vc-hooks lisp-float-type elisp-mode tabulated-list replace newcomment
text-mode lisp-mode prog-mode register page tab-bar menu-bar rfn-eshadow
isearch easymenu timer select mouse jit-lock font-lock syntax font-core
term/tty-colors frame minibuffer nadvice seq simple cl-generic
indonesian philippine cham georgian utf-8-lang misc-lang vietnamese
tibetan thai tai-viet lao korean japanese eucjp-ms cp51932 hebrew greek
romanian slovak czech european ethiopic indian cyrillic chinese
composite emoji-zwj charscript charprop case-table epa-hook
jka-cmpr-hook help abbrev obarray oclosure cl-preloaded button loaddefs
theme-loaddefs faces cus-face macroexp files window text-properties
overlay sha1 md5 base64 format env code-pages mule custom widget keymap
hashtable-print-readable backquote threads inotify lcms2 multi-tty
make-network-process native-compile emacs)

Memory information:
((conses 16 79456 11259) (symbols 48 7266 2) (strings 32 19563 4524)
 (string-bytes 1 555520) (vectors 16 9518)
 (vector-slots 8 101651 9432) (floats 8 33 11518)
 (intervals 56 2220 0) (buffers 984 14))




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#71475; Package emacs. (Mon, 10 Jun 2024 20:01:02 GMT) Full text and rfc822 format available.

Message #8 received at 71475 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Daniel Clemente <n142857 <at> gmail.com>
Cc: 71475 <at> debbugs.gnu.org
Subject: Re: bug#71475: 30.0.50;
 crash in adjust_frame_glyphs (called by delete_frame)
Date: Mon, 10 Jun 2024 22:17:12 +0300
> From: Daniel Clemente <n142857 <at> gmail.com>
> Date: Mon, 10 Jun 2024 15:58:33 +0000
> 
> Apparently we're in a case in which the frame's glyph matrix exists
> but it has 0 rows, and adjust_frame_glyphs doesn't like that.

We are in the process of deleting this frame because its terminal is
being deleted.  So requiring that its glyph matrix has non-zero number
of rows makes no sense.  I installed a fix for that (hopefully, since
you didn't really present a recipe I could follow).

Thanks.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#71475; Package emacs. (Tue, 11 Jun 2024 16:54:02 GMT) Full text and rfc822 format available.

Message #11 received at 71475 <at> debbugs.gnu.org (full text, mbox):

From: Daniel Clemente <n142857 <at> gmail.com>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: 71475 <at> debbugs.gnu.org
Subject: Re: bug#71475: 30.0.50;
 crash in adjust_frame_glyphs (called by delete_frame)
Date: Tue, 11 Jun 2024 16:52:10 +0000
[Message part 1 (text/plain, inline)]
> We are in the process of deleting this frame because its terminal is
> being deleted.  So requiring that its glyph matrix has non-zero number
> of rows makes no sense.  I installed a fix for that (hopefully, since
> you didn't really present a recipe I could follow)

I can't also reproduce this a formula, but the solution seems fine and the
bug can be closed; thanks.
[Message part 2 (text/html, inline)]

Reply sent to Stefan Kangas <stefankangas <at> gmail.com>:
You have taken responsibility. (Tue, 11 Jun 2024 20:03:02 GMT) Full text and rfc822 format available.

Notification sent to Daniel Clemente <n142857 <at> gmail.com>:
bug acknowledged by developer. (Tue, 11 Jun 2024 20:03:02 GMT) Full text and rfc822 format available.

Message #16 received at 71475-done <at> debbugs.gnu.org (full text, mbox):

From: Stefan Kangas <stefankangas <at> gmail.com>
To: Daniel Clemente <n142857 <at> gmail.com>, Eli Zaretskii <eliz <at> gnu.org>
Cc: 71475-done <at> debbugs.gnu.org
Subject: Re: bug#71475: 30.0.50;
 crash in adjust_frame_glyphs (called by delete_frame)
Date: Tue, 11 Jun 2024 20:00:56 +0000
Daniel Clemente <n142857 <at> gmail.com> writes:

> the bug can be closed; thanks.

Done.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#71475; Package emacs. (Tue, 11 Jun 2024 20:25:07 GMT) Full text and rfc822 format available.

Message #19 received at 71475-done <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Daniel Clemente <n142857 <at> gmail.com>
Cc: 71475-done <at> debbugs.gnu.org
Subject: Re: bug#71475: 30.0.50;
 crash in adjust_frame_glyphs (called by delete_frame)
Date: Tue, 11 Jun 2024 22:21:20 +0300
> From: Daniel Clemente <n142857 <at> gmail.com>
> Date: Tue, 11 Jun 2024 16:52:10 +0000
> Cc: 71475 <at> debbugs.gnu.org
> 
> > We are in the process of deleting this frame because its terminal is
> > being deleted.  So requiring that its glyph matrix has non-zero number
> > of rows makes no sense.  I installed a fix for that (hopefully, since
> > you didn't really present a recipe I could follow)
> 
> I can't also reproduce this a formula, but the solution seems fine and the bug can be closed; thanks.

Done, thanks.




bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Wed, 10 Jul 2024 11:24:20 GMT) Full text and rfc822 format available.

This bug report was last modified 1 year and 39 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.