29.0.50; Emacs SEGV in get_glyph_face_and_encoding

  • Done
  • quality assurance status badge
Details
3 participants
  • Eli Zaretskii
  • James Ferguson
  • Lars Ingebrigtsen
Owner
unassigned
Submitted by
James Ferguson
Severity
normal
J
J
James Ferguson wrote on 31 Mar 2022 23:19
(address . bug-gnu-emacs@gnu.org)
CAMtGdSm7kwHKkR-FmCDjGxo5Tj6pqUoK_RqZkVxGj3z4Thmr3Q@mail.gmail.com
My Emacs has SEGVing a few times (twice today), from a fairly recent
build off `master`. Sometimes it seems to have happened when doing
autocompletion (using the `corfu` package), but it has definitely
happened when idle from a user perspective.

I'm afraid I have a lot of packages active including lsp, and it's way
too random and sporadic to be able to craft a cut-down config.

I will put the `bt full` output at the bottom of this email. I have
quite a few cores, but a quick check looks like they all have similar stack.
That `face = 0x0` looks ... ominous(?).

Please let me know if I can help generate more data.

Thanks, James.

----




In GNU Emacs 29.0.50 (build 2, x86_64-pc-linux-gnu, GTK+ Version 3.24.20,
cairo version 1.16.0)
of 2022-03-23 built on jf-laptop
Repository revision: d74cd0cf1f96e256c479599939efacd11600c0c8
Repository branch: master
System Description: Ubuntu 20.04.4 LTS

Configured using:
'configure --with-native-compilation --with-pgtk'

Configured features:
ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GPM GSETTINGS HARFBUZZ JPEG
JSON LCMS2 LIBOTF LIBSELINUX LIBSYSTEMD LIBXML2 MODULES NATIVE_COMP
NOTIFY INOTIFY PDUMPER PGTK PNG RSVG SECCOMP SOUND THREADS TIFF
TOOLKIT_SCROLL_BARS XIM GTK3 ZLIB

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

Major mode: Dired by name

Minor modes in effect:
dap-tooltip-mode: t
dap-ui-many-windows-mode: t
dap-ui-controls-mode: t
dap-ui-mode: t
gdb-many-windows: t
gud-tooltip-mode: t
dap-auto-configure-mode: t
dap-mode: t
treemacs-filewatch-mode: t
treemacs-follow-mode: t
treemacs-git-mode: t
treemacs-fringe-indicator-mode: t
global-git-commit-mode: t
magit-auto-revert-mode: t
org-roam-db-autosync-mode: t
shell-dirtrack-mode: t
corfu-doc-mode: t
ws-butler-global-mode: t
ws-butler-mode: t
winner-mode: t
which-key-mode: t
vertico-mode: t
global-tree-sitter-mode: t
dired-omit-mode: t
async-bytecomp-package-mode: t
dired-async-mode: t
prescient-persist-mode: t
projectile-mode: t
minions-mode: t
marginalia-mode: t
textsize-mode: t
direnv-mode: t
corfu-global-mode: t
corfu-mode: t
pixel-scroll-precision-mode: t
savehist-mode: t
save-place-mode: t
recentf-mode: t
global-hl-line-mode: t
hl-line-mode: t
global-auto-revert-mode: t
electric-pair-mode: t
delete-selection-mode: t
straight-use-package-mode: t
straight-package-neutering-mode: t
override-global-mode: t
tooltip-mode: t
global-eldoc-mode: t
show-paren-mode: t
electric-indent-mode: t
mouse-wheel-mode: t
tab-bar-mode: t
file-name-shadow-mode: t
global-font-lock-mode: t
font-lock-mode: t
window-divider-mode: t
buffer-read-only: t
transient-mark-mode: t
auto-composition-mode: t
auto-encryption-mode: t
auto-compression-mode: t

Load-path shadows:
/home/james/.emacs.d/elpa/dpkg-dev-el-20190824.2314/debian-autoloads hides
/home/james/.emacs.d/elpa/debian-el-20211006.1939/debian-autoloads
/home/james/.emacs.d/elpa/transient-20220314.1605/transient hides
/usr/local/share/emacs/29.0.50/lisp/transient
/home/james/.emacs.d/my-packages/custom hides
/usr/local/share/emacs/29.0.50/lisp/custom

Features:
(shadow sort expand-region text-mode-expansions cc-mode-expansions
the-org-mode-expansions python-el-fgallina-expansions
er-basic-expansions expand-region-core expand-region-custom mail-extr
emacsbug mule-util lsp-diagnostics lsp-headerline lsp-icons lsp-modeline
dap-mouse dap-ui gdb-mi bindat gud bui bui-list bui-info bui-entry
bui-core bui-history bui-button bui-utils lsp-lens dap-mode dap-launch
posframe dap-overlays vc-git vc-dispatcher view lsp-zig lsp-steep
lsp-svelte lsp-sqls lsp-yaml lsp-xml lsp-vimscript lsp-vhdl lsp-volar
lsp-vetur lsp-html lsp-verilog lsp-vala lsp-v lsp-typeprof lsp-ttcn3
lsp-toml lsp-terraform lsp-tex lsp-sorbet lsp-solargraph lsp-rust lsp-rf
lsp-remark lsp-r lsp-purescript lsp-pylsp lsp-pyls lsp-pwsh lsp-php
lsp-perlnavigator lsp-perl lsp-ocaml lsp-magik lsp-nix lsp-nim lsp-nginx
lsp-markdown lsp-lua lsp-kotlin lsp-json lsp-javascript lsp-idris
lsp-haxe lsp-groovy lsp-hack lsp-graphql lsp-go lsp-completion
lsp-gdscript lsp-fsharp lsp-fortran lsp-eslint lsp-erlang lsp-emmet
lsp-elixir lsp-elm lsp-dockerfile lsp-dhall lsp-d lsp-css lsp-csharp
lsp-crystal lsp-cmake lsp-clojure lsp-treemacs lsp-treemacs-themes
treemacs treemacs-header-line treemacs-compatibility treemacs-mode
treemacs-interface treemacs-extensions treemacs-mouse-interface
treemacs-tags treemacs-persistence treemacs-filewatch-mode
treemacs-follow-mode treemacs-rendering treemacs-async
treemacs-workspaces treemacs-dom treemacs-visuals
treemacs-fringe-indicator treemacs-scope pulse treemacs-faces
treemacs-icons treemacs-themes treemacs-core-utils pfuture
treemacs-logging treemacs-customization treemacs-macros
lsp-semantic-tokens lsp-clangd dom lsp-beancount lsp-bash lsp-ansible
lsp-angular lsp-ada lsp-actionscript ccls ccls-member-hierarchy
ccls-inheritance-hierarchy ccls-call-hierarchy ccls-tree ccls-code-lens
ccls-semantic-highlight ccls-common help-fns radix-tree elpy elpy-rpc
pyvenv eshell esh-cmd esh-ext esh-opt esh-proc esh-io esh-arg esh-module
esh-groups esh-util elpy-shell elpy-profile elpy-django elpy-refactor
ido hideshow files-x etags fileloop cus-edit cus-start sphinx-doc
worksplit forge-list forge-commands forge-semi forge-bitbucket buck
forge-gogs gogs forge-gitea gtea forge-gitlab glab forge-github
ghub-graphql treepy gsexp ghub let-alist gnutls forge-notify
forge-revnote forge-pullreq forge-issue forge-topic yaml parse-time
bug-reference forge-post forge-repo forge forge-core forge-db closql
magit-submodule magit-obsolete magit-blame magit-stash magit-reflog
magit-bisect magit-push magit-pull magit-fetch magit-clone magit-remote
magit-commit magit-sequence magit-notes magit-worktree magit-tag
magit-merge magit-branch magit-reset magit-files magit-refs magit-status
magit magit-repos magit-apply magit-wip magit-log which-func magit-diff
smerge-mode diff git-commit log-edit message sendmail yank-media rfc822
mml mml-sec epa gnus-util mm-decode mm-bodies mm-encode mailabbrev
mail-utils gmm-utils mailheader pcvs-util add-log magit-core
magit-autorevert magit-margin magit-transient magit-process with-editor
magit-mode transient magit-git magit-base crm lsp-pyright lsp-ui
lsp-ui-flycheck lsp-ui-doc goto-addr lsp-ui-imenu lsp-ui-peek
lsp-ui-sideline flycheck lsp-ui-util face-remap lsp-mode lsp-protocol
xref spinner network-stream markdown-mode color imenu ht inline f ewoc
epg rfc6068 epg-config cursor-sensor my-org-roam org-roam-dailies
org-roam-migrate org-roam-mode org-roam-capture org-roam-id
org-roam-node org-roam-db org-roam-utils org-roam-compat org-roam
org-capture org-id ox-reveal ox-odt rng-loc rng-uri rng-parse rng-match
rng-dt rng-util rng-pttrn nxml-parse nxml-ns nxml-enc xmltok nxml-util
ox-md ox-latex ox-icalendar org-agenda org-refile ox-html table ox-ascii
ox-publish ox org-element avl-tree generator ob-async org-variable-pitch
org org-macro org-footnote org-pcomplete org-list org-faces org-entities
noutline outline org-version ob-C cc-mode cc-fonts cc-guess cc-menus
cc-cmds cc-styles cc-align cc-engine cc-vars cc-defs ob-http
ob-http-mode ob-python py-isort python-black reformatter python ob-shell
shell pcomplete ob-ditaa ob-plantuml ob-dot ob ob-tangle org-src ob-ref
ob-lob ob-table ob-exp ob-comint ob-emacs-lisp ob-core ob-eval org-table
oc-basic bibtex iso8601 time-date ol org-keys oc org-compat org-macs
org-loaddefs format-spec find-func cal-menu calendar cal-loaddefs
emacsql-sqlite url-http url-auth mail-parse rfc2231 rfc2047 rfc2045
mm-util ietf-drums mail-prsvr url-gw nsm rmc puny emacsql
emacsql-compiler magit-section display-fill-column-indicator flyspell
ispell highlight-symbol cl yasnippet-snippets yasnippet corfu-doc
faff-theme init xterm-color ws-butler winner which-key vterm-autoloads
vertico tree-sitter-langs tree-sitter-langs-build tar-mode arc-mode
archive-mode pp tree-sitter-hl tree-sitter tree-sitter-load
tree-sitter-cli tsc tsc-dyn tsc-dyn-get dired-x dired-filetype-face
async-bytecomp dired-async dired-aux async dired dired-loaddefs
tsc-obsolete s prescient comp comp-cstr warnings projectile lisp-mnt
ibuffer-vc ibuf-macs ibuf-ext ibuffer ibuffer-loaddefs thingatpt project
orderless minions marginalia hydra lv grep-a-lot grep compile
text-property-search comint ansi-color advice textsize direnv pcase
diff-mode dash corfu dotenv-mode server pixel-scroll ring edmacro kmacro
savehist saveplace recentf tree-widget wid-edit hl-line autorevert
filenotify elec-pair delsel cus-load straight-autoloads cl-extra
help-mode straight use-package use-package-ensure use-package-delight
use-package-diminish use-package-bind-key bind-key easy-mmode
use-package-core derived finder-inf ede/auto eieio-base dpkg-dev-el
debian-el rx info package browse-url url url-proxy url-privacy
url-expand url-methods url-history url-cookie url-domsuf url-util
mailcap url-handlers url-parse auth-source cl-seq eieio eieio-core
cl-macs eieio-loaddefs password-cache json map url-vars seq gv subr-x
byte-opt bytecomp byte-compile cconv cl-loaddefs cl-lib iso-transl
tooltip eldoc paren electric uniquify ediff-hook vc-hooks
lisp-float-type elisp-mode mwheel term/pgtk-win pgtk-win term/common-win
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
simple cl-generic 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 cl-preloaded button 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 make-network-process
native-compile emacs)

Memory information:
((conses 16 1238499 895807)
(symbols 48 64456 176)
(strings 32 340297 89952)
(string-bytes 1 12906406)
(vectors 16 116582)
(vector-slots 8 2891539 339078)
(floats 8 835 1260)
(intervals 56 6275 657)
(buffers 992 24))

----
bt full output:

(gdb) bt full
#0 raise (sig=sig@entry=11) at ../sysdeps/unix/sysv/linux/raise.c:50
set = {__val = {18446744067266837247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
268435456, 0, 0, 93918994993472, 18446744067266838271}}
pid = <optimized out>
tid = <optimized out>
#1 0x0000556b38450782 in terminate_due_to_signal (sig=sig@entry=11,
backtrace_limit=backtrace_limit@entry=40) at emacs.c:450
#2 0x0000556b38450cc7 in handle_fatal_signal (sig=sig@entry=11) at
sysdep.c:1780
#3 0x0000556b385590ed in deliver_thread_signal (sig=sig@entry=11,
handler=0x556b38450cb6 <handle_fatal_signal>) at sysdep.c:1772
#4 0x0000556b3855916d in deliver_fatal_thread_signal (sig=11) at
sysdep.c:1792
fatal = <optimized out>
#5 handle_sigsegv (sig=11, siginfo=<optimized out>, arg=<optimized out>)
at sysdep.c:1885
fatal = <optimized out>
#6 0x00007f7bd8ff13c0 in <signal handler called> () at
/lib/x86_64-linux-gnu/libpthread.so.0
#7 prepare_face_for_display (f=0x556b3d9467e0, face=0x0) at xfaces.c:4439
#8 0x0000556b38475c59 in get_glyph_face_and_encoding (f=<optimized out>,
glyph=glyph@entry=0x556b69564fb0, char2b=0x7ffe4893d7b0) at xdisp.c:28569
face = 0x0
code = 0
#9 0x0000556b384af7ce in fill_glyph_string
(s=s@entry=0x7ffe4893d850, face_id=face_id@entry=91, start=start@entry=0,
end=end@entry=35, overlaps=overlaps@entry=0) at xdisp.c:28854
glyph = 0x556b69564fb0
last = 0x556b69565640
voffset = 0
glyph_not_available_p = false
#10 0x0000556b384b09e7 in draw_glyphs
(w=<optimized out>, x=<optimized out>, row=<optimized out>,
area=<optimized out>, start=<optimized out>, end=<optimized out>,
hl=<optimized out>, overla
ps=<optimized out>) at xdisp.c:29656
face_id = 91
char2b = <optimized out>
first_glyph = <optimized out>
head = 0x7ffe4893d850
tail = 0x7ffe4893d850
s = 0x7ffe4893d850
clip_head = 0x0
clip_tail = 0x0
i = <optimized out>
j = <optimized out>
x_reached = <optimized out>
last_x = <optimized out>
area_left = <optimized out>
f = <optimized out>
sa_avail = 16244
sa_count = {bytes = <optimized out>}
#11 0x0000556b384b3aa5 in gui_write_glyphs (w=0x556b3a491748,
updated_row=<optimized out>, start=<optimized out>, updated_area=TEXT_AREA,
len=35)
at xdisp.c:31863
x = <optimized out>
hpos = 0
chpos = 34
#12 0x0000556b3845b308 in update_text_area (vpos=0,
updated_row=0x556b3f92e140, w=0x556b3a491748) at dispnew.c:3939
rif = <optimized out>
changed_p = false
current_row = 0x556b43b48410
desired_row = 0x556b3f92e140
rif = <optimized out>
changed_p = false
#13 update_window_line (w=w@entry=0x556b3a491748, vpos=vpos@entry=0,
mouse_face_overwritten_p=mouse_face_overwritten_p@entry=0x7ffe4893dc67)
at dispnew.c:4182
current_row = 0x556b43b48410
desired_row = 0x556b3f92e140
rif = <optimized out>
changed_p = false
#14 0x0000556b38460ee6 in update_window (w=w@entry=0x556b3a491748,
force_p=<optimized out>, force_p@entry=true) at dispnew.c:3682
vpos = <optimized out>
i = <optimized out>
end = <optimized out>
tab_line_row = <optimized out>
mouse_face_overwritten_p = false
n_updated = 0
mode_line_row = <optimized out>
changed_p = false
invisible_rows_marked = false
row = <optimized out>
header_line_row = <optimized out>
yb = <optimized out>
desired_matrix = <optimized out>
paused_p = <optimized out>
preempt_count = <optimized out>
rif = <optimized out>
#15 0x0000556b384627a3 in update_window_tree (w=0x556b3a491748,
w@entry=0x556b485b24c8,
force_p=force_p@entry=true) at dispnew.c:3407
paused_p = false
#16 0x0000556b384629db in update_frame (f=f@entry=0x556b3d9467e0,
force_p=true, force_p@entry=false,
inhibit_hairy_id_p=inhibit_hairy_id_p@entry=false)
at dispnew.c:3242
paused_p = <optimized out>
root_window = 0x556b485b24c8
#17 0x0000556b384a92e5 in redisplay_internal () at xdisp.c:16598
gcscrollbars = <optimized out>
f_redisplay_flag = <optimized out>
f = 0x556b3d9467e0
w = <optimized out>
sw = <optimized out>
fr = <optimized out>
pending = false
must_finish = <optimized out>
match_p = <optimized out>
tlbufpos = {charpos = <optimized out>, bytepos = <optimized out>}
tlendpos = {charpos = <optimized out>, bytepos = <optimized out>}
number_of_visible_frames = <optimized out>
sf = <optimized out>
polling_stopped_here = true
tail = 0x556b3aef20c3
frame = 0x556b3d9467e5
hscroll_retries = <optimized out>
garbaged_frame_retries = 0
consider_all_windows_p = <optimized out>
update_miniwindow_p = <optimized out>
#18 0x0000556b384aa9c4 in redisplay_preserve_echo_area
(from_where=from_where@entry=2) at xdisp.c:16867
#19 0x0000556b3845cadd in Fredisplay (force=<optimized out>) at
dispnew.c:6188
count = {bytes = <optimized out>}
#20 Fredisplay (force=0x2a109a6911c8) at dispnew.c:6168
#21 0x00007f7bd0688d62 in
F636f7266752d2d6d616b652d6672616d65_corfu__make_frame_0 ()
at
/home/james/.emacs.d/eln-cache/29.0.50-d0d7c8d0/corfu-7d809953-f87af7f9.eln
#22 0x0000556b385c8050 in Ffuncall (nargs=6, args=0x7ffe4893f5f0) at
eval.c:2939
val = <optimized out>
#23 0x00007f7bd0689596 in
F636f7266752d2d706f7075702d73686f77_corfu__popup_show_0 ()
at
/home/james/.emacs.d/eln-cache/29.0.50-d0d7c8d0/corfu-7d809953-f87af7f9.eln
#24 0x0000556b385ca072 in funcall_subr (subr=0x556b3babcfa0, numargs=7,
args=<optimized out>) at eval.c:2989
argbuf = {0x192, 0x4e2, 0x5e, 0x192, 0x5e, 0x3e, 0x5e, 0x192}
a = <optimized out>
fun = <optimized out>
#25 0x0000556b385c8050 in Ffuncall (nargs=8, args=0x7ffe4893f770) at
eval.c:2939
val = <optimized out>
#26 0x0000556b385c8458 in Fapply (nargs=2, args=0x7f7bd1790040) at
eval.c:2546
i = <optimized out>
funcall_nargs = 8
funcall_args = <optimized out>
spread_arg = 0x0
fun = <optimized out>
sa_avail = <optimized out>
sa_count = {bytes = 576}
numargs = <optimized out>
retval = <optimized out>
#27 0x0000556b38613177 in exec_byte_code (fun=<optimized out>,
args_template=<optimized out>, nargs=<optimized out>, args=<optimized out>)
at bytecode.c:809
call_nargs = 2
call_fun = <optimized out>
template = <optimized out>
val = <optimized out>
call_args = 0x7f7bd1790040
original_fun = 0x2c70
bytecode = <optimized out>
op = 2
type = <optimized out>
targets =
{0x556b38454e9d <exec_byte_code-1825811>, 0x556b386133c9
<exec_byte_code+2329>, 0x556b386133c0 <exec_byte_code+2320>, 0x556b386133b7
<exec_byte_co
de+2311>, 0x556b38612c80 <exec_byte_code+464>, 0x556b38612c84
<exec_byte_code+468>, 0x556b3861337f <exec_byte_code+2255>, 0x556b38613347
<exec_byte_code+219
9>, 0x556b38613b6f <exec_byte_code+4287>, 0x556b38613b66
<exec_byte_code+4278>, 0x556b38613b5d <exec_byte_code+4269>, 0x556b38613b54
<exec_byte_code+4260>,
0x556b38612cb7 <exec_byte_code+519>, 0x556b38612cc0 <exec_byte_code+528>,
0x556b38613b42 <exec_byte_code+4242>, 0x556b38613abd <exec_byte_code+4109>,
0x556b
38613c26 <exec_byte_code+4470>, 0x556b38613c1d <exec_byte_code+4461>,
0x556b38613c14 <exec_byte_code+4452>, 0x556b38613c0b <exec_byte_code+4443>,
0x556b3861
2c11 <exec_byte_code+353>, 0x556b38612c18 <exec_byte_code+360>,
0x556b38613be7 <exec_byte_code+4407>, 0x556b38613bf9 <exec_byte_code+4425>,
0x556b38613b8a <
exec_byte_code+4314>, 0x556b38613b81 <exec_byte_code+4305>, 0x556b38613b78
<exec_byte_code+4296>, 0x556b386141f0 <exec_byte_code+5952>, 0x556b38612f14
<exec
_byte_code+1124>, 0x556b38612f20 <exec_byte_code+1136>, 0x556b38613ba5
<exec_byte_code+4341>, 0x556b38613b93 <exec_byte_code+4323>, 0x556b386141c3
<exec_byt
e_code+5907>, 0x556b386141ba <exec_byte_code+5898>, 0x556b386141b1
<exec_byte_code+5889>, 0x556b386141a8 <exec_byte_code+5880>, 0x556b38612d28
<exec_byte_co
de+632>, 0x556b38612d30 <exec_byte_code+640>, 0x556b386141de
<exec_byte_code+5934>, 0x556b386141cc <exec_byte_code+5916>, 0x556b3861417b
<exec_byte_code+583
5>, 0x556b38614172 <exec_byte_code+5826>, 0x556b38614169
<exec_byte_code+5817>, 0x556b38614160 <exec_byte_code+5808>, 0x556b38612ec9
<exec_byte_code+1049>,
0x556b38612ed0 <exec_byte_code+1056>, 0x556b38614196 <exec_byte_code+5862>,
0x556b38614184 <exec_byte_code+5844>, 0x556b38613d9c <exec_byte_code+4844>,
0x55
6b38613dcb <exec_byte_code+4891>, 0x556b38613e40 <exec_byte_code+5008>,
0x556b38454ea1 <exec_byte_code-1825807>, 0x556b38454ea1
<exec_byte_code-1825807>, 0x
556b38454ea1 <exec_byte_code-1825807>, 0x556b38454ea1
<exec_byte_code-1825807>, 0x556b38454ea1 <exec_byte_code-1825807>,
0x556b38615145 <exec_byte_code+9877
Toggle quote (1 lines)
>, 0x556b386150e2 <exec_byte_code+9778>, 0x556b386150a3
<exec_byte_code+9715>, 0x556b38615064 <exec_byte_code+9652>, 0x556b38615021
<exec_byte_code+9585>, 0
x556b38613ca4 <exec_byte_code+4596>, 0x556b38613c66 <exec_byte_code+4534>,
0x556b38614ff3 <exec_byte_code+9539>, 0x556b38613acf <exec_byte_code+4127>,
0x556
b38613c2f <exec_byte_code+4479>, 0x556b38614fb5 <exec_byte_code+9477>,
0x556b38614f89 <exec_byte_cod
This message was truncated. Download the full message here.
Attachment: file
E
E
Eli Zaretskii wrote on 1 Apr 2022 09:40
(name . James Ferguson)(address . james@faff.org)(address . 54661@debbugs.gnu.org)
83mth55k0c.fsf@gnu.org
Toggle quote (15 lines)
> From: James Ferguson <james@faff.org>
> Date: Thu, 31 Mar 2022 17:19:03 -0400
>
> My Emacs has SEGVing a few times (twice today), from a fairly recent
> build off `master`. Sometimes it seems to have happened when doing
> autocompletion (using the `corfu` package), but it has definitely
> happened when idle from a user perspective.
>
> I'm afraid I have a lot of packages active including lsp, and it's way
> too random and sporadic to be able to craft a cut-down config.
>
> I will put the `bt full` output at the bottom of this email. I have
> quite a few cores, but a quick check looks like they all have similar stack.
> That `face = 0x0` looks ... ominous(?).

Yes, that's the immediate reason for the segfault. The question is:
how did that happen? It usually happens because some code cleared the
frame's face cache between the time the window's glyph matrix was
created/updated, which holds the face for each glyph to be displayed,
and the time the window's display is actually drawn to the glass. The
former part happens in redisplay_windows, called on line 16518 of
xdisp.c; the latter part happens inside update_frame, called on line
16598 of xdisp.c. The way to debug this is to find which code empties
the face cache, and then figure out the control flow path which leads
to that code in your scenario.

Can you try figuring that out? One way of doing so is to set up a
breakpoint in free_realized_faces, here:

for (i = 0; i < c->used; ++i) <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
{
free_realized_face (f, c->faces_by_id[i]);
c->faces_by_id[i] = NULL;
}

and enable this breakpoint only between the above two lines of
xdisp.c. (You can do that via breakpoint commands of 2 more
breakpoints in xdisp.c, in the places I mentioned above: a breakpoint
on xdisp.c:16531 with commands that enable the breakpoint in
free_realized_face, and another on xdisp.c:16598 which disables that
breakpoint.) Then in the breakpoint commands for the breakpoint in
free_realized_face, produce the C and Lisp backtrace (the latter with
xbacktrace command defined on src/.gdbinit), and post it here. That
might tell us which code is doing this.

Thanks.
L
L
Lars Ingebrigtsen wrote on 2 Apr 2022 17:29
control message for bug #54661
(address . control@debbugs.gnu.org)
87h77bijvd.fsf@gnus.org
tags 54661 + moreinfo
quit
L
L
Lars Ingebrigtsen wrote on 30 Apr 2022 19:28
Re: bug#54661: 29.0.50; Emacs SEGV in get_glyph_face_and_encoding
(name . Eli Zaretskii)(address . eliz@gnu.org)
87r15ev5t0.fsf@gnus.org
Eli Zaretskii <eliz@gnu.org> writes:

Toggle quote (19 lines)
> Can you try figuring that out? One way of doing so is to set up a
> breakpoint in free_realized_faces, here:
>
> for (i = 0; i < c->used; ++i) <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
> {
> free_realized_face (f, c->faces_by_id[i]);
> c->faces_by_id[i] = NULL;
> }
>
> and enable this breakpoint only between the above two lines of
> xdisp.c. (You can do that via breakpoint commands of 2 more
> breakpoints in xdisp.c, in the places I mentioned above: a breakpoint
> on xdisp.c:16531 with commands that enable the breakpoint in
> free_realized_face, and another on xdisp.c:16598 which disables that
> breakpoint.) Then in the breakpoint commands for the breakpoint in
> free_realized_face, produce the C and Lisp backtrace (the latter with
> xbacktrace command defined on src/.gdbinit), and post it here. That
> might tell us which code is doing this.

This was a month ago, and there wasn't any response, so I guess there's
little chance that there'll be any development in this bug report, so
I'm closing it. If progress can be made, please respond to the debbugs
address and we'll reopen.

--
(domestic pets only, the antidote for overdose, milk.)
L
L
Lars Ingebrigtsen wrote on 30 Apr 2022 19:29
control message for bug #54661
(address . control@debbugs.gnu.org)
87pmkyv5sw.fsf@gnus.org
close 54661
quit
?