Subject: 31.0.50; feature/igc: crashes with no gui frame

From: john muhl <[email-masked]>
Date: Thu, 07 Aug 2025 12:09:19 -0500

Recently (since a0757e0ac05) Emacs has been crashing regularly when
running with only tty frames. It could be a coincidence but keeping a
gui frame around has let me run crash free for days, then I get rid of
that frame and within a couple of hours at most Emacs crashes.

I haven’t been able to find a recipe that reliably crashes but hit them
in various everyday usage like C-n in a dired buffer, C-xb otherbuf TAB,
C/M-v, etc. This latest crash was after pressing SPC in a gnus summary
buffer to go the next unread article.

I still have the crashed session attached to gdb around if there is
anything else that would help.

(gdb) bt full
#0  terminate_due_to_signal (sig=11, backtrace_limit=40) at emacs.c:444
No locals.
#1  0x000055555589a228 in handle_fatal_signal (sig=11) at sysdep.c:1793
No locals.
#2  0x000055555589a2b2 in deliver_thread_signal (sig=11, handler=0x55555589a210 <handle_fatal_signal>) at sysdep.c:1785
        old_errno = 2
#3  0x00005555558959ea in deliver_fatal_thread_signal (sig=11) at sysdep.c:1805
No locals.
#4  0x000055555589a342 in handle_sigsegv (sig=11, siginfo=0x555555bfb7f0 <sigsegv_stack+62928>, arg=0x555555bfb6c0 <sigsegv_stack+62624>) at sysdep.c:1943
        fatal = false
#5  <signal handler called>
No locals.
#6  0x00007ffff57d0327 in __GI_kill () at ../sysdeps/unix/syscall-template.S:120
No locals.
#7  0x0000555555b5f0f9 in sigHandle ()
No symbol table info available.
#8  <signal handler called>
No locals.
#9  0x00005555556ca07a in line_hash_code (f=0x7fff43aae670, row=0x555556059240) at dispnew.c:1196
        c = 32
        face_id = 0
        glyph = 0x55556d380850
        end = 0x55556d3820d0
        hash = 0
#10 0x00005555556c83f2 in scrolling (frame=0x7fff43aae670) at dispnew.c:5827
        unchanged_at_top = 0
        unchanged_at_bottom = 45
        window_size = 0
        changed_lines = 0
        i = 0
        height = 45
        free_at_end_vpos = 45
        current_matrix = 0x55555632fe30
        desired_matrix = 0x555555ccc520
        old_hash = 0x7fffffff95d0
        sa_avail = 15664
        sa_count = {
          bytes = 192
        }
        new_hash = 0x7fffffff9684
        draw_cost = 0x7fffffff9738
        old_draw_cost = 0x7fffffff97ec
#11 0x00005555556b9749 in write_matrix (f=0x7fff43aae670, inhibit_id_p=false, updating_menu_p=false) at dispnew.c:5772
        first_row = 0
        last_row = 21845
#12 0x00005555556b906d in combine_updates_for_frame (f=0x7fff43aae670, inhibit_scrolling=false) at dispnew.c:4085
        root = 0x7fff43aae670
        z_order = {
          i = 0x7fff44c58d0b
        }
        topmost_child = 0x0
#13 0x00005555556ba424 in combine_updates (roots=...) at dispnew.c:4135
        root = 0x7fff43aae670
#14 0x000055555570f6f6 in redisplay_internal () at xdisp.c:17807
        tty_root_frames = {
          i = 0x7fff44c4d4cb
        }
        MAX_HSCROLL_RETRIES = MAX_HSCROLL_RETRIES
        MAX_GARBAGED_FRAME_RETRIES = MAX_GARBAGED_FRAME_RETRIES
        w = 0x7fff467b0748
        sw = 0x7fff467b0748
        fr = 0x7fff4399e000
        must_finish = true
        match_p = true
        tlbufpos = {
          charpos = 6192,
          bytepos = 6197
        }
        tlendpos = {
          charpos = 0,
          bytepos = 0
        }
        number_of_visible_frames = 2
        sf = 0x7fff4399e000
        polling_stopped_here = true
        tail = {
          i = 0x0
        }
        frame = {
          i = 0x7fff43aae675
        }
        hscroll_retries = 0
        garbaged_frame_retries = 0
        consider_all_windows_p = true
        update_miniwindow_p = true
        count = {
          bytes = 96
        }
        previous_frame = 0x7fff4399e000
        current_matrices_cleared = false
        new_count = 32767
#15 0x00005555557179b9 in redisplay () at xdisp.c:16850
No locals.
#16 0x000055555585d1d0 in read_char (commandflag=1, map=..., prev_event=..., used_mouse_menu=0x7fffffffd4df, end_time=0x0) at keyboard.c:2689
        echo_current = true
        c = {
          i = 0x0
        }
        local_getcjmp = {{
            __jmpbuf = {55832, 0, 160, 55832, 93824999301240, 55832, 55832, 55832},
            __mask_was_saved = 55832,
            __saved_mask = {
              __val = {55832, 140737488342704, 93824995580517, 0, 192, 140734347075432, 140734347075435, 160, 445, 118, 563, 6, 557, 2, 140734576048900, 1030}
            }
          }}
        save_jump = {{
            __jmpbuf = {14323566176, 24, 140737488342304, 93824997369764, 59136, 12884901912, 140734347075432, 140734347075435},
            __mask_was_saved = -12976,
            __saved_mask = {
              __val = {93824997369689, 140734347075432, 140734347075411, 55832, 140734347075435, 140737488342400, 93824996183549, 96, 140734347075411, 55832, 140734347075435, 140737488342704, 93824995566605, 0, 140734576049085, 56}
            }
          }}
        tem = {
          i = 0x7fffe8001a00
        }
        save = {
          i = 0x7fff44c3df68
        }
        previous_echo_area_message = {
          i = 0x0
        }
        also_record = {
          i = 0x0
        }
        reread = false
        recorded = false
        polling_stopped_here = false
        orig_kboard = 0x555556c4a1b0
        jmpcount = {
          bytes = 1
        }
        c_volatile = {
          i = 0x38
        }
#17 0x0000555555859b1a in read_key_sequence (keybuf=0x7fffffffd9f0, prompt=..., dont_downcase_last=false, can_return_switch_frame=true, fix_current_buffer=true, prevent_redisplay=false, disable_text_conversion_p=false) at keyboard.c:11197
        interrupted_kboard = 0x555556c4a1b0
        interrupted_frame = 0x7fff4399e000
        key = {
          i = 0x7d2
        }
        used_mouse_menu = false
        echo_local_start = 0
        last_real_key_start = 0
        keys_local_start = 0
        new_binding = {
          i = 0x0
        }
        count = {
          bytes = 96
        }
        t = 0
        echo_start = 0
        keys_start = 0
        current_binding = {
          i = 0x7fff44c3df6b
        }
        first_unbound = 31
        mock_input = 0
        used_mouse_menu_history = {false <repeats 30 times>}
        fkey = {
          parent = {
            i = 0x7fff439da8ab
          },
          map = {
            i = 0x7fff439da8ab
          },
          start = 0,
          end = 0
        }
        keytran = {
          parent = {
            i = 0x7fff4398eeab
          },
          map = {
            i = 0x7fff4398eeab
          },
          start = 0,
          end = 0
        }
        indec = {
          parent = {
            i = 0x7fff439da893
          },
          map = {
            i = 0x7fff439da893
          },
          start = 0,
          end = 0
        }
        shift_translated = false
        delayed_switch_frame = {
          i = 0x0
        }
        original_uppercase = {
          i = 0x0
        }
        original_uppercase_position = -1
        starting_buffer = 0x7fff46678f50
        fake_prefixed_keys = {
          i = 0x0
        }
        first_event = {
          i = 0x0
        }
        second_event = {
          i = 0x0
        }
#18 0x00005555558577a6 in command_loop_1 () at keyboard.c:1441
        keybuf = {{
            i = 0x82
          }, {
            i = 0x555555958162 <builtin_lisp_symbol+34>
          }, {
            i = 0x56069dd0
          }, {
            i = 0x0
          }, {
            i = 0x7fffffffda90
          }, {
            i = 0x555555958bd1 <unbind_to+305>
          }, {
            i = 0x0
          }, {
            i = 0x0
          }, {
            i = 0x555556069e30
          }, {
            i = 0x0
          }, {
            i = 0x0
          }, {
            i = 0xc
          }, {
            i = 0x13e80
          }, {
            i = 0x38
          }, {
            i = 0x7fff46678f55
          }, {
            i = 0x0
          }, {
            i = 0x0
          }, {
            i = 0x0
          }, {
            i = 0x60
          }, {
            i = 0x0
          }, {
            i = 0x7fffffffdbf0
          }, {
            i = 0x555555858ca3 <cmd_error+915>
          }, {
            i = 0x555556c4a1b0
          }, {
            i = 0x555556c4a1b0
          }, {
            i = 0x56069dd0
          }, {
            i = 0x7fff44a6ed68
          }, {
            i = 0x0
          }, {
            i = 0x0
          }, {
            i = 0x0
          }, {
            i = 0x0
          }}
        i = 1
        last_pt = 6192
        cmd = {
          i = 0x2aa9edeab5a8
        }
        prev_modiff = 8343
        prev_buffer = 0x7fff46678f50
#19 0x000055555595ebd1 in internal_condition_case (bfun=0x5555558571c0 <command_loop_1>, handlers=..., hfun=0x555555858910 <cmd_error>) at eval.c:1713
        val = {
          i = 0x0
        }
        c = 0x555555cc74b0
#20 0x0000555555857173 in command_loop_2 (handlers=...) at keyboard.c:1180
        val = {
          i = 0x2
        }
#21 0x000055555595dc6f in internal_catch (tag=..., func=0x555555857150 <command_loop_2>, arg=...) at eval.c:1393
        val = {
          i = 0xa8
        }
        c = 0x555555cc7320
#22 0x000055555585638e in command_loop () at keyboard.c:1158
No locals.
#23 0x0000555555856160 in recursive_edit_1 () at keyboard.c:766
        count = {
          bytes = 32
        }
        val = {
          i = 0x55555595e141 <record_unwind_protect+129>
        }
#24 0x00005555558566af in Frecursive_edit () at keyboard.c:849
        count = {
          bytes = 0
        }
        buffer = {
          i = 0x0
        }
#25 0x00005555558529dc in main (argc=1, argv=0x7fffffffe248) at emacs.c:2651
        stack_bottom_variable = 0x555555c7d560
        old_argc = 1
        dump_file = 0x0
        no_loadup = false
        junk = 0x0
        dname_arg = 0x0
        ch_to_dir = 0x0
        original_pwd = 0x0
        dump_mode = 0x0
        skip_args = 0
        temacs = 0x0
        attempt_load_pdump = true
        only_version = false
        rlim = {
          rlim_cur = 10022912,
          rlim_max = 18446744073709551615
        }
        lc_all = 0x0
        sockfd = -1
        module_assertions = false

Lisp Backtrace:
"redisplay_internal (C function)" (0x0)

In GNU Emacs 31.0.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version
 3.24.49, cairo version 1.18.4) of 2025-08-03 built on nano
Repository revision: 92f52805f9e99068ff07148a3a76b1d97e77adbf
Repository branch: feature/igc
System Description: Void Linux

Configured using:
 'configure CC=clang 'CFLAGS=-O0 -g3' CPPFLAGS=-I/home/jm/opt/mps
 'LDFLAGS=-L/home/jm/opt/mps -fuse-ld=lld' --enable-check=yes,glyphs
 --enable-check-lisp-object-type --with-mps --with-pgtk
 --without-native-compilation'

Configured features:
ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GSETTINGS HARFBUZZ JPEG
LCMS2 LIBOTF LIBXML2 MODULES MPS NOTIFY INOTIFY PDUMPER PGTK PNG RSVG
SECCOMP SOUND SQLITE3 THREADS TIFF TOOLKIT_SCROLL_BARS TREE_SITTER WEBP
XIM GTK3 ZLIB

Important settings:
  value of $LC_COLLATE: C
  value of $LANG: en_US.UTF-8
  locale-coding-system: utf-8-unix

Major mode: Lisp Interaction

Minor modes in effect:
  bug-reference-prog-mode: t
  checkdoc-minor-mode: t
  outline-minor-mode: t
  whitespace-mode: t
  flyspell-mode: t
  midnight-mode: t
  kill-ring-deindent-mode: t
  global-paren-face-mode: t
  paren-face-mode: t
  global-kkp-mode: t
  desktop-save-mode: t
  cua-mode: t
  auto-insert-mode: t
  savehist-mode: t
  save-place-mode: t
  repeat-mode: t
  global-auto-revert-mode: t
  electric-pair-mode: t
  delete-selection-mode: t
  minibuffer-electric-default-mode: t
  global-completion-preview-mode: t
  completion-preview-mode: t
  tooltip-mode: t
  global-eldoc-mode: t
  eldoc-mode: t
  show-paren-mode: t
  electric-quote-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  prettify-symbols-mode: t
  tab-bar-history-mode: t
  file-name-shadow-mode: t
  context-menu-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  minibuffer-regexp-mode: t
  column-number-mode: t
  line-number-mode: t
  transient-mark-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  auto-save-visited-mode: t
  abbrev-mode: t

Load-path shadows:
None found.

Features:
(shadow sort mail-extr gnus-msg gnus-art mm-uu mml2015 mm-view mml-smime
smime gnutls dig gnus-sum shr pixel-fill kinsoku url-file svg dom
gnus-group gnus-undo gnus-start gnus-dbus dbus xml gnus-cloud nnimap
nnmail browse-url xdg url url-proxy url-privacy url-expand url-methods
url-history url-cookie generate-lisp-file url-domsuf url-util
mail-source utf7 nnoo parse-time iso8601 gnus-spec gnus-int gnus-range
gnus-win emacsbug message mailcap yank-media puny rfc822 mml mml-sec epa
derived epg rfc6068 epg-config mm-decode mm-bodies mm-encode mail-parse
rfc2231 mailabbrev gmm-utils mailheader sendmail rfc2047 rfc2045
ietf-drums vc-git diff-mode track-changes files-x vc vc-dispatcher
bug-reference checkdoc lisp-mnt thingatpt noutline outline disp-table
whitespace flyspell ispell auth-source-pass url-parse url-vars
auth-source cl-seq eieio eieio-core cl-macs password-cache json map
server noco-theme unspecified-theme most-faces color time window-x
dired-x dired dired-loaddefs help-at-pt cursor-sensor midnight
indent-aux gnus nnheader gnus-util text-property-search time-date subr-x
mail-utils range mm-util mail-prsvr paren-face kkp term/xterm xterm
byte-opt gv bytecomp byte-compile compat desktop frameset cua-base
autoinsert fennel-mode-autoloads gauge-autoloads gauge
indent-bars-autoloads kkp-autoloads nanoid-autoloads
paren-face-autoloads unspecified-theme-autoloads most-faces-autoloads
xr-autoloads rx blase-theme cl-extra help-mode blase-defaults-theme
savehist saveplace repeat autorevert filenotify elec-pair delsel
easy-mmode blase-completion-theme minibuf-eldef completion-preview
site-start cus-edit pp cus-start cus-load icons wid-edit cl-loaddefs
cl-lib rmc iso-transl tooltip cconv eldoc paren electric uniquify
ediff-hook vc-hooks lisp-float-type elisp-mode mwheel term/pgtk-win
pgtk-win term/common-win touch-screen pgtk-dnd tool-bar dnd fontset
image regexp-opt fringe tabulated-list replace newcomment text-mode
lisp-mode prog-mode register page tab-bar menu-bar rfn-eshadow isearch
easymenu timer select scroll-bar 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 dbusbind inotify
dynamic-setting system-font-setting font-render-setting cairo gtk pgtk
lcms2 multi-tty move-toolbar make-network-process tty-child-frames mps
emacs)

Memory information:
((conses 24 0 0) (symbols 56 0 0) (strings 40 0 0) (string-bytes 1 0)
 (vectors 24 0) (vector-slots 8 0 0) (floats 24 0 0)
 (intervals 64 0 0) (buffers 1072 0))