[GDK] GTK 3.24.40 + Wayland + Monitor disconnect = DoubleFreeOrCorruptionDetected
Steps to reproduce
This happens on a single monitor setup.
- Open chromium or any electron based app
- Disconnect your monitor (my monitor does that when turning it off)
- Reconnect your monitor
- All electron/chromium apps crash
Version information
- This happened after upgrading to GTK3 3.24.40, after downgrading to 3.24.39 the issue is gone.
- System: Arch Linux, KDE, Wayland, AMDGPU
Git bisect results:
- commit adce74bc: suspected commit for this crash
- commit 57acc714: first after 3.24.39 to start crashing with this repro, but this is already fixed (commit 19b515dc is working fine)
- all of these commits are part of !6680 (merged)
Warnings
Output of chromium:
[211541:211541:0119/112348.733000:ERROR:browser_main_loop.cc(276)] Gdk: gdk_monitor_get_scale_factor: assertion 'GDK_IS_MONITOR (monitor)' failed
[0119/112348.754922:ERROR:elf_dynamic_array_reader.h(64)] tag not found
[0119/112348.755066:ERROR:elf_dynamic_array_reader.h(64)] tag not found
[0119/112348.755937:ERROR:elf_dynamic_array_reader.h(64)] tag not found
[0119/112348.757345:ERROR:elf_dynamic_array_reader.h(64)] tag not found
[0119/112348.762656:ERROR:elf_dynamic_array_reader.h(64)] tag not found
[0119/112348.762752:ERROR:elf_dynamic_array_reader.h(64)] tag not found
[0119/112348.764198:ERROR:elf_dynamic_array_reader.h(64)] tag not found
[0119/112348.764954:ERROR:elf_dynamic_array_reader.h(64)] tag not found
[0119/112348.765086:ERROR:elf_dynamic_array_reader.h(64)] tag not found
[1] 211541 trace trap (core dumped) chromium
Note: gdk_monitor_get_scale_factor assertion
also happens on the working version
Backtrace
electron on 3.24.40 (and adce74bc)
#0 0x000062a190b75e17 in partition_alloc::internal::PartitionRefCount::DoubleFreeOrCorruptionDetected(unsigned int) ()
#1 0x000062a190b88a27 in allocator_shim::internal::PartitionFree(allocator_shim::AllocatorDispatch const*, void*, void*) ()
#2 0x000074c849eab0c2 in gdk_x11_monitor_finalize (gobject=0x7ffe24139ee0) at ../gtk/gdk/x11/gdkmonitor-x11.c:102
#3 0x000074c84ee278b4 in g_object_unref (_object=0x33940001d680) at ../glib/gobject/gobject.c:3941
#4 g_object_unref (_object=0x33940001d680) at ../glib/gobject/gobject.c:3805
#5 0x000074c849ea84b6 in init_randr13 (screen=screen@entry=0x3394009e0c80, changed=changed@entry=0x7ffe2413a074) at ../gtk/gdk/x11/gdkscreen-x11.c:926
#6 0x000074c849ea8b6b in init_multihead (screen=0x3394009e0c80) at ../gtk/gdk/x11/gdkscreen-x11.c:1058
#7 process_monitors_change (screen=0x3394009e0c80) at ../gtk/gdk/x11/gdkscreen-x11.c:1211
#8 _gdk_x11_screen_size_changed (screen=0x3394009e0c80, event=<optimized out>) at ../gtk/gdk/x11/gdkscreen-x11.c:1250
#9 0x000074c849e9fadc in gdk_x11_display_translate_event (translator=<optimized out>, display=0x3394001d41c0, event=0x339400057180, xevent=0x7ffe2413a1d0) at ../gtk/gdk/x11/gdkdisplay-x11.c:1201
#10 0x000074c849e9b2b8 in _gdk_x11_event_translator_translate (translator=0x3394001d41c0, display=0x3394001d41c0, xevent=xevent@entry=0x7ffe2413a1d0) at ../gtk/gdk/x11/gdkeventtranslator.c:51
#11 0x000074c849e9e268 in gdk_event_source_translate_event (xevent=0x7ffe2413a1d0, event_source=0x33940001d080) at ../gtk/gdk/x11/gdkeventsource.c:243
#12 _gdk_x11_display_queue_events (display=0x3394001d41c0) at ../gtk/gdk/x11/gdkeventsource.c:341
#13 0x000074c849e42fa9 in gdk_display_get_event (display=0x3394001d41c0) at ../gtk/gdk/gdkdisplay.c:442
#14 0x000074c849e9e428 in gdk_event_source_dispatch.lto_priv () at ../gtk/gdk/x11/gdkeventsource.c:354
#15 0x000074c84e50df69 in g_main_dispatch (context=0x19a000235140) at ../glib/glib/gmain.c:3476
#16 0x000074c84e56c367 in g_main_context_dispatch_unlocked (context=0x19a000235140) at ../glib/glib/gmain.c:4284
#17 g_main_context_iterate_unlocked.isra.0 (context=context@entry=0x19a000235140, block=block@entry=0, dispatch=dispatch@entry=1, self=<optimized out>) at ../glib/glib/gmain.c:4349
#18 0x000074c84e50c162 in g_main_context_iteration (context=0x19a000235140, may_block=0) at ../glib/glib/gmain.c:4414
#19 0x000062a1944f7c8f in base::MessagePumpGlib::Run(base::MessagePump::Delegate*) ()
#20 0x000062a19449854c in base::sequence_manager::internal::ThreadControllerWithMessagePumpImpl::Run(bool, base::TimeDelta) ()
#21 0x000062a194465e15 in base::RunLoop::Run(base::Location const&) ()
#22 0x000062a193243e8d in content::BrowserMainLoop::RunMainMessageLoop() ()
#23 0x000062a193245db3 in content::BrowserMainRunnerImpl::Run() ()
#24 0x000062a19324130c in content::BrowserMain(content::MainFunctionParams) ()
#25 0x000062a190caa4a7 in content::RunBrowserProcessMain(content::MainFunctionParams, content::ContentMainDelegate*) ()
#26 0x000062a190cabfe8 in content::ContentMainRunnerImpl::RunBrowser(content::MainFunctionParams, bool) ()
#27 0x000062a190cabdba in content::ContentMainRunnerImpl::Run() ()
#28 0x000062a190ca8f26 in content::RunContentProcess(content::ContentMainParams, content::ContentMainRunner*) ()
#29 0x000062a190ca940c in content::ContentMain(content::ContentMainParams) ()
#30 0x000062a19094fb56 in main ()
Edited by Jona Wagner