Crash in listbox if it's made visible while adding a child
Steps to reproduce
- Have a hidden GtkListBox
- Observe its children, connecting to items-changed to make it visible whenever anything changes
- Add a child
Here is a sample program that demonstrates this: testcrash.py (run this and click the "Add label" button to trigger the crash)
If you wait until after the child is finished being added (after the append
call) to make the list box visible, there's no crash. It's the making-visible-during that seems to trigger this crash.
Version information
This was tested with the gtk in the gnome-nightly flatpak Sdk. gtk4-demo --version
says 3.99.4
, but I'm not sure which actual git version it is.
Host OS is Ubuntu 20.10, but I don't think that would matter here.
Warnings
Gtk:ERROR:../gtk/gtkwidget.c:2337:gtk_widget_root: assertion failed: (!priv->realized)
Bail out! Gtk:ERROR:../gtk/gtkwidget.c:2337:gtk_widget_root: assertion failed: (!priv->realized)
Aborted (core dumped)
Backtrace
Sorry, I don't have the Debug symbols for the Sdk installed right now. If this is harder to reproduce than I think, I can provide a more detailed backtrace.
0x00007ffff7adb775 in raise () from /usr/lib/x86_64-linux-gnu/libc.so.6
(gdb) bt
#0 0x00007ffff7adb775 in raise () at /usr/lib/x86_64-linux-gnu/libc.so.6
#1 0x00007ffff7ac4855 in abort () at /usr/lib/x86_64-linux-gnu/libc.so.6
#2 0x00007ffff74a8b1c in g_assertion_message_expr.cold ()
at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#3 0x00007ffff750731f in g_assertion_message_expr ()
at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#4 0x00007ffff609bb1e in gtk_widget_root ()
at /usr/lib/x86_64-linux-gnu/libgtk-4.so.0
#5 0x00007ffff609c4c8 in gtk_widget_reposition_after ()
at /usr/lib/x86_64-linux-gnu/libgtk-4.so.0
#6 0x00007ffff5f5b258 in gtk_list_box_insert ()
at /usr/lib/x86_64-linux-gnu/libgtk-4.so.0
#7 0x00007ffff7fbef75 in ffi_call_unix64 ()
at /usr/lib/x86_64-linux-gnu/libffi.so.7
#8 0x00007ffff7fbe369 in ffi_call_int ()
at /usr/lib/x86_64-linux-gnu/libffi.so.7
#9 0x00007ffff75fbec5 in pygi_invoke_c_callable ()
at /usr/lib/python3.8/site-packages/gi/_gi.cpython-38-x86_64-linux-gnu.so
#10 0x00007ffff75f2a2c in pygi_function_cache_invoke ()
at /usr/lib/python3.8/site-packages/gi/_gi.cpython-38-x86_64-linux-gnu.so
#11 0x00007ffff75f67cd in _callable_info_call ()
at /usr/lib/python3.8/site-packages/gi/_gi.cpython-38-x86_64-linux-gnu.so
#12 0x00007ffff7d50cb7 in _PyObject_MakeTpCall ()
--Type <RET> for more, q to quit, c to continue without paging--
at /usr/lib/x86_64-linux-gnu/libpython3.8.so.1.0
#13 0x00007ffff7ce4d17 in _PyEval_EvalFrameDefault ()
at /usr/lib/x86_64-linux-gnu/libpython3.8.so.1.0
#14 0x00007ffff7cdbf13 in function_code_fastcall ()
at /usr/lib/x86_64-linux-gnu/libpython3.8.so.1.0
#15 0x00007ffff7d25c3f in PyVectorcall_Call ()
at /usr/lib/x86_64-linux-gnu/libpython3.8.so.1.0
#16 0x00007ffff75ffe79 in pygi_signal_closure_marshal ()
at /usr/lib/python3.8/site-packages/gi/_gi.cpython-38-x86_64-linux-gnu.so
#17 0x00007ffff74419da in g_closure_invoke ()
at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#18 0x00007ffff7454593 in signal_emit_unlocked_R.isra.0 ()
at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#19 0x00007ffff745ad01 in g_signal_emit_valist ()
at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#20 0x00007ffff745ae63 in g_signal_emit ()
at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#21 0x00007ffff5e38b3f in _gtk_marshal_VOID__INT_DOUBLE_DOUBLEv ()
at /usr/lib/x86_64-linux-gnu/libgtk-4.so.0
#22 0x00007ffff7441c36 in _g_closure_invoke_va ()
at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#23 0x00007ffff745ac7f in g_signal_emit_valist ()
at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
--Type <RET> for more, q to quit, c to continue without paging--
#24 0x00007ffff745ae63 in g_signal_emit ()
at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#25 0x00007ffff5f1baf4 in gtk_gesture_click_end ()
at /usr/lib/x86_64-linux-gnu/libgtk-4.so.0
#26 0x00007ffff7444df4 in g_cclosure_marshal_VOID__BOXEDv ()
at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#27 0x00007ffff7441c36 in _g_closure_invoke_va ()
at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#28 0x00007ffff745ac7f in g_signal_emit_valist ()
at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#29 0x00007ffff745ae63 in g_signal_emit ()
at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#30 0x00007ffff5f18407 in _gtk_gesture_check_recognized ()
at /usr/lib/x86_64-linux-gnu/libgtk-4.so.0
#31 0x00007ffff5f19c83 in gtk_gesture_handle_event ()
at /usr/lib/x86_64-linux-gnu/libgtk-4.so.0
#32 0x00007ffff5f1d12c in gtk_gesture_single_handle_event ()
at /usr/lib/x86_64-linux-gnu/libgtk-4.so.0
#33 0x00007ffff5ee2b1a in gtk_event_controller_handle_event ()
at /usr/lib/x86_64-linux-gnu/libgtk-4.so.0
#34 0x00007ffff609105a in gtk_widget_run_controllers ()
at /usr/lib/x86_64-linux-gnu/libgtk-4.so.0
#35 0x00007ffff609875c in _gtk_widget_captured_event ()
--Type <RET> for more, q to quit, c to continue without paging--
at /usr/lib/x86_64-linux-gnu/libgtk-4.so.0
#36 0x00007ffff5f69a96 in gtk_propagate_event_internal ()
at /usr/lib/x86_64-linux-gnu/libgtk-4.so.0
#37 0x00007ffff5f6a1b3 in gtk_main_do_event ()
at /usr/lib/x86_64-linux-gnu/libgtk-4.so.0
#38 0x00007ffff60a5aa0 in surface_event ()
at /usr/lib/x86_64-linux-gnu/libgtk-4.so.0
#39 0x00007ffff61965cb in _gdk_marshal_BOOLEAN__POINTER ()
at /usr/lib/x86_64-linux-gnu/libgtk-4.so.0
#40 0x00007ffff61bdd53 in gdk_surface_event_marshaller ()
at /usr/lib/x86_64-linux-gnu/libgtk-4.so.0
#41 0x00007ffff74419da in g_closure_invoke ()
at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#42 0x00007ffff7454593 in signal_emit_unlocked_R.isra.0 ()
at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#43 0x00007ffff745a646 in g_signal_emit_valist ()
at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#44 0x00007ffff745ae63 in g_signal_emit ()
at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#45 0x00007ffff61c14fb in gdk_surface_handle_event ()
at /usr/lib/x86_64-linux-gnu/libgtk-4.so.0
#46 0x00007ffff61fea7e in gdk_event_source_dispatch ()
at /usr/lib/x86_64-linux-gnu/libgtk-4.so.0
--Type <RET> for more, q to quit, c to continue without paging--
#47 0x00007ffff74de28b in g_main_context_dispatch ()
at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#48 0x00007ffff74de538 in g_main_context_iterate.constprop ()
at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#49 0x00007ffff74de853 in g_main_loop_run ()
at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#50 0x00007ffff7fbef75 in ffi_call_unix64 ()
at /usr/lib/x86_64-linux-gnu/libffi.so.7
#51 0x00007ffff7fbe369 in ffi_call_int ()
at /usr/lib/x86_64-linux-gnu/libffi.so.7
#52 0x00007ffff75fbec5 in pygi_invoke_c_callable ()
at /usr/lib/python3.8/site-packages/gi/_gi.cpython-38-x86_64-linux-gnu.so
#53 0x00007ffff75f2a2c in pygi_function_cache_invoke ()
at /usr/lib/python3.8/site-packages/gi/_gi.cpython-38-x86_64-linux-gnu.so
#54 0x00007ffff75f67cd in _callable_info_call ()
at /usr/lib/python3.8/site-packages/gi/_gi.cpython-38-x86_64-linux-gnu.so
#55 0x00007ffff7d50cb7 in _PyObject_MakeTpCall ()
at /usr/lib/x86_64-linux-gnu/libpython3.8.so.1.0
#56 0x00007ffff7ce4d17 in _PyEval_EvalFrameDefault ()
at /usr/lib/x86_64-linux-gnu/libpython3.8.so.1.0
#57 0x00007ffff7df2ba4 in _PyEval_EvalCodeWithName ()
at /usr/lib/x86_64-linux-gnu/libpython3.8.so.1.0
#58 0x00007ffff7df3c91 in _PyFunction_Vectorcall ()
--Type <RET> for more, q to quit, c to continue without paging--
at /usr/lib/x86_64-linux-gnu/libpython3.8.so.1.0
#59 0x00007ffff7ce3336 in _PyEval_EvalFrameDefault ()
at /usr/lib/x86_64-linux-gnu/libpython3.8.so.1.0
#60 0x00007ffff7df2ba4 in _PyEval_EvalCodeWithName ()
at /usr/lib/x86_64-linux-gnu/libpython3.8.so.1.0
#61 0x00007ffff7df2e9e in PyEval_EvalCodeEx ()
at /usr/lib/x86_64-linux-gnu/libpython3.8.so.1.0
#62 0x00007ffff7df2ecb in PyEval_EvalCode ()
at /usr/lib/x86_64-linux-gnu/libpython3.8.so.1.0
#63 0x00007ffff7df32d7 in run_eval_code_obj ()
at /usr/lib/x86_64-linux-gnu/libpython3.8.so.1.0
#64 0x00007ffff7e5d9d1 in run_mod ()
at /usr/lib/x86_64-linux-gnu/libpython3.8.so.1.0
#65 0x00007ffff7e5e592 in PyRun_FileExFlags ()
at /usr/lib/x86_64-linux-gnu/libpython3.8.so.1.0
#66 0x00007ffff7e6e15b in PyRun_SimpleFileExFlags ()
at /usr/lib/x86_64-linux-gnu/libpython3.8.so.1.0
#67 0x00007ffff7e71330 in Py_RunMain ()
at /usr/lib/x86_64-linux-gnu/libpython3.8.so.1.0
#68 0x00007ffff7e71766 in Py_BytesMain ()
at /usr/lib/x86_64-linux-gnu/libpython3.8.so.1.0
#69 0x00007ffff7ac6022 in __libc_start_main ()
at /usr/lib/x86_64-linux-gnu/libc.so.6
--Type <RET> for more, q to quit, c to continue without paging--
#70 0x000055555555508e in _start ()
Edited by Michael Terry