gtk_css_node_invalidate_timestamp()/libxml segfault when opening files
[runtime.version]
version = "45.alpha"
channel = "flatpak-nightly"
identifier = "44.1-12-g4673dae4a"
I've been getting a reoccurring crash when using Builder 43 that I noticed again after upgrading to 44. It tends to occur after opening a source file while it's being indexed (applying highlighting, etc.) and can happen repeatedly when relaunching Builder with the same file open. I haven't notice it crashing on the same file reliably, just that when it does occur it can get tripped up on the same file multiple times until decides not to.
I thought it was about time to see if I could aid in tracking it down. While running 44 through GDB the backtrace led somewhere in libxml, but I haven't been able to reproduce that with nightly so far so I'm unsure if they're one in the same. This is what I'm getting from a similar crash in nightly:
Thread 1 "gnome-builder" received signal SIGSEGV, Segmentation fault.
0x00007ffff76bd110 in undefined_value () from /usr/lib/x86_64-linux-gnu/libgtk-4.so.1
(gdb) bt full
#0 0x00007ffff76bd110 in undefined_value () at /usr/lib/x86_64-linux-gnu/libgtk-4.so.1
#1 0x00007ffff72f42cb in gtk_css_node_invalidate_timestamp () at /usr/lib/x86_64-linux-gnu/libgtk-4.so.1
#2 0x00007ffff72f42e0 in gtk_css_node_invalidate_timestamp () at /usr/lib/x86_64-linux-gnu/libgtk-4.so.1
#3 0x00007ffff72f42e0 in gtk_css_node_invalidate_timestamp () at /usr/lib/x86_64-linux-gnu/libgtk-4.so.1
#4 0x00007ffff72f42e0 in gtk_css_node_invalidate_timestamp () at /usr/lib/x86_64-linux-gnu/libgtk-4.so.1
#5 0x00007ffff72f42e0 in gtk_css_node_invalidate_timestamp () at /usr/lib/x86_64-linux-gnu/libgtk-4.so.1
#6 0x00007ffff72f42e0 in gtk_css_node_invalidate_timestamp () at /usr/lib/x86_64-linux-gnu/libgtk-4.so.1
#7 0x00007ffff72f42e0 in gtk_css_node_invalidate_timestamp () at /usr/lib/x86_64-linux-gnu/libgtk-4.so.1
#8 0x00007ffff72f42e0 in gtk_css_node_invalidate_timestamp () at /usr/lib/x86_64-linux-gnu/libgtk-4.so.1
#9 0x00007ffff72f42e0 in gtk_css_node_invalidate_timestamp () at /usr/lib/x86_64-linux-gnu/libgtk-4.so.1
#10 0x00007ffff72f42e0 in gtk_css_node_invalidate_timestamp () at /usr/lib/x86_64-linux-gnu/libgtk-4.so.1
#11 0x00007ffff72f42e0 in gtk_css_node_invalidate_timestamp () at /usr/lib/x86_64-linux-gnu/libgtk-4.so.1
#12 0x00007ffff72f42e0 in gtk_css_node_invalidate_timestamp () at /usr/lib/x86_64-linux-gnu/libgtk-4.so.1
#13 0x00007ffff72f42e0 in gtk_css_node_invalidate_timestamp () at /usr/lib/x86_64-linux-gnu/libgtk-4.so.1
#14 0x00007ffff72f42e0 in gtk_css_node_invalidate_timestamp () at /usr/lib/x86_64-linux-gnu/libgtk-4.so.1
#15 0x00007ffff72f42e0 in gtk_css_node_invalidate_timestamp () at /usr/lib/x86_64-linux-gnu/libgtk-4.so.1
#16 0x00007ffff72f42e0 in gtk_css_node_invalidate_timestamp () at /usr/lib/x86_64-linux-gnu/libgtk-4.so.1
#17 0x00007ffff72f42e0 in gtk_css_node_invalidate_timestamp () at /usr/lib/x86_64-linux-gnu/libgtk-4.so.1
#18 0x00007ffff72f42e0 in gtk_css_node_invalidate_timestamp () at /usr/lib/x86_64-linux-gnu/libgtk-4.so.1
#19 0x00007ffff72f42e0 in gtk_css_node_invalidate_timestamp () at /usr/lib/x86_64-linux-gnu/libgtk-4.so.1
#20 0x00007ffff72f42e0 in gtk_css_node_invalidate_timestamp () at /usr/lib/x86_64-linux-gnu/libgtk-4.so.1
#21 0x00007ffff72f42e0 in gtk_css_node_invalidate_timestamp () at /usr/lib/x86_64-linux-gnu/libgtk-4.so.1
#22 0x00007ffff72f42e0 in gtk_css_node_invalidate_timestamp () at /usr/lib/x86_64-linux-gnu/libgtk-4.so.1
#23 0x00007ffff72f42e0 in gtk_css_node_invalidate_timestamp () at /usr/lib/x86_64-linux-gnu/libgtk-4.so.1
#24 0x00007ffff72f4332 in gtk_css_node_invalidate_frame_clock () at /usr/lib/x86_64-linux-gnu/libgtk-4.so.1
#25 0x00007ffff731090d in gtk_css_widget_node_queue_callback () at /usr/lib/x86_64-linux-gnu/libgtk-4.so.1
#26 0x00007ffff729e495 in gtk_widget_on_frame_clock_update () at /usr/lib/x86_64-linux-gnu/libgtk-4.so.1
#27 0x00007ffff7b92442 in g_closure_invoke () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#28 0x00007ffff7ba65c8 in signal_emit_unlocked_R.isra.0 () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#29 0x00007ffff7bad575 in g_signal_emit_valist () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#30 0x00007ffff7bad743 in g_signal_emit () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#31 0x00007ffff744414d in _gdk_frame_clock_emit_update () at /usr/lib/x86_64-linux-gnu/libgtk-4.so.1
#32 0x00007ffff7444e12 in gdk_frame_clock_paint_idle () at /usr/lib/x86_64-linux-gnu/libgtk-4.so.1
#33 0x00007ffff7444fa4 in gdk_frame_clock_flush_idle () at /usr/lib/x86_64-linux-gnu/libgtk-4.so.1
#34 0x00007ffff7a8da4f in g_timeout_dispatch () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#35 0x00007ffff7a8cd49 in g_main_context_dispatch () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#36 0x00007ffff7a8d2a8 in g_main_context_iterate.constprop () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#37 0x00007ffff7a8d343 in g_main_context_iteration () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#38 0x00007ffff7cd138d in g_application_run () at /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0
#39 0x0000555555634c6a in ()
#40 0x00007ffff202954a in __libc_start_call_main () at /usr/lib/x86_64-linux-gnu/libc.so.6
#41 0x00007ffff202960b in __libc_start_main () at /usr/lib/x86_64-linux-gnu/libc.so.6
#42 0x00005555556359b5 in _start ()
The backtrace from 44:
Thread 1 "gnome-builder" received signal SIGSEGV, Segmentation fault.
tcmalloc::SLL_PopRange (end=<synthetic pointer>, start=<synthetic pointer>, N=32, head=0x555555b55160) at src/linked_list.h:88
88 tmp = SLL_Next(tmp);
(gdb) bt full
#0 tcmalloc::SLL_PopRange(void**, int, void**, void**) (end=<synthetic pointer>, start=<synthetic pointer>, N=32, head=0x555555b55160) at src/linked_list.h:88
i = 12
tmp = 0x0
delta_bytes = 4096
batch_size = 32
tail = <optimized out>
head = <optimized out>
#1 tcmalloc::SLL_PopRange(void**, int, void**, void**) (end=<synthetic pointer>, start=<synthetic pointer>, N=32, head=0x555555b55160) at src/linked_list.h:79
delta_bytes = 4096
batch_size = 32
tail = <optimized out>
head = <optimized out>
#2 tcmalloc::ThreadCache::FreeList::PopRange(int, void**, void**) (end=<synthetic pointer>, start=<synthetic pointer>, N=32, this=0x555555b55160) at src/thread_cache.h:238
delta_bytes = 4096
batch_size = 32
tail = <optimized out>
head = <optimized out>
#3 tcmalloc::ThreadCache::ReleaseToCentralCache(tcmalloc::ThreadCache::FreeList*, unsigned int, int) (this=this@entry=0x555555b55040, src=src@entry=0x555555b55160, cl=<optimized out>, N=N@entry=32)
at src/thread_cache.cc:206
delta_bytes = 4096
batch_size = 32
tail = <optimized out>
head = <optimized out>
#4 0x00007ffff7de99a9 in tcmalloc::ThreadCache::ListTooLong(tcmalloc::ThreadCache::FreeList*, unsigned int) (this=0x555555b55040, list=0x555555b55160, cl=<optimized out>) at src/thread_cache.cc:164
batch_size = 32
#5 0x00007ffff6cc2f21 in xmlFreeNodeList () at /usr/lib/x86_64-linux-gnu/libxml2.so.2
#6 0x00007ffff6cc310c in xmlFreeProp () at /usr/lib/x86_64-linux-gnu/libxml2.so.2
#7 0x00007ffff6cc85ce in xmlUnsetProp () at /usr/lib/x86_64-linux-gnu/libxml2.so.2
#8 0x00007ffff6d5ee78 in xmlRelaxNGCleanupTree () at /usr/lib/x86_64-linux-gnu/libxml2.so.2
#9 0x00007ffff6d64b2a in xmlRelaxNGParse () at /usr/lib/x86_64-linux-gnu/libxml2.so.2
#10 0x00007ffff6d50dd0 in xmlTextReaderRelaxNGValidateInternal.constprop.0 () at /usr/lib/x86_64-linux-gnu/libxml2.so.2
#11 0x00007ffff6f995ba in file_parse () at /usr/lib/x86_64-linux-gnu/libgtksourceview-5.so.0
#12 0x00007ffff6f9b9b5 in _gtk_source_language_file_parse_version2 () at /usr/lib/x86_64-linux-gnu/libgtksourceview-5.so.0
#13 0x00007ffff6f53f6b in gtk_source_language_parse_file () at /usr/lib/x86_64-linux-gnu/libgtksourceview-5.so.0
#14 0x00007ffff6f55033 in _gtk_source_language_create_engine () at /usr/lib/x86_64-linux-gnu/libgtksourceview-5.so.0
#15 0x00007ffff6f3ca18 in gtk_source_buffer_set_language () at /usr/lib/x86_64-linux-gnu/libgtksourceview-5.so.0
#16 0x000055555562b521 in ide_buffer_guess_language (self=0x55555aff9d30) at ../src/libide/code/ide-buffer.c:4012
manager = 0x5555566fd200
lang = 0x555559aba700
basename = 0x55555af01b40 "tct-exporter.h"
content_type = 0x555559a5e360 "text/x-chdr"
line = 0x55555ad2a880 "/*"
lang_id = 0x5555563a9e88 "chdr"
path = <optimized out>
file = <optimized out>
uncertain = 0
#17 0x00007ffff7b92442 in g_closure_invoke () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#18 0x00007ffff7ba6813 in signal_emit_unlocked_R.isra.0 () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#19 0x00007ffff7bad6a5 in g_signal_emit_valist () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#20 0x00007ffff7bad873 in g_signal_emit () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#21 0x00007ffff6f8704b in validate_and_insert.part () at /usr/lib/x86_64-linux-gnu/libgtksourceview-5.so.0
#22 0x00007ffff6f87663 in gtk_source_buffer_output_stream_write () at /usr/lib/x86_64-linux-gnu/libgtksourceview-5.so.0
#23 0x00007ffff7c7e8b6 in g_output_stream_write () at /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0
#24 0x00007ffff6f49291 in read_cb () at /usr/lib/x86_64-linux-gnu/libgtksourceview-5.so.0
#25 0x00007ffff7c69a77 in async_ready_callback_wrapper () at /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0
#26 0x00007ffff7ca01cb in g_task_return_now () at /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0
#27 0x00007ffff7ca0205 in complete_in_idle_cb () at /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0
#28 0x00007ffff7a8cd99 in g_main_context_dispatch () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#29 0x00007ffff7a8d2f8 in g_main_context_iterate.constprop () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#30 0x00007ffff7a8d393 in g_main_context_iteration () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#31 0x00007ffff7cd172d in g_application_run () at /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0
#32 0x0000555555621d2b in main (argc=<optimized out>, argv=<optimized out>) at ../src/main.c:298
messages_debug = 0x0
app = 0x55555637e9c0
desktop = <optimized out>
standalone = 0
version = 0
ret = <optimized out>