Closed totaam closed 1 month ago
(gdb) bt
#0 0x00007fffe8dac9d2 in g_type_check_instance_is_fundamentally_a (type_instance=0x5555568fe6a0, fundamental_type=0x50) at ../gobject/gtype.c:4154
#1 0x00007fffe8d910cb in g_object_get_qdata (object=0x5555568fe6a0, quark=63) at ../gobject/gobject.c:4541
#2 0x00007fffe8f7bbe6 in pygobject_get_inst_data (self=0x7fff990c8600) at ../gi/pygobject-object.c:163
#3 pygobject_dealloc (self=0x7fff990c8600) at ../gi/pygobject-object.c:1128
#4 0x00007ffff79b42f5 in subtype_dealloc (self=0x7fff990c8600) at /usr/src/debug/python3.12-3.12.4-1.fc40.x86_64/Objects/typeobject.c:2054
#5 0x00007ffff7968797 in _Py_Dealloc (op=<optimized out>) at /usr/src/debug/python3.12-3.12.4-1.fc40.x86_64/Objects/object.c:2625
#6 Py_DECREF (op=<optimized out>) at /usr/src/debug/python3.12-3.12.4-1.fc40.x86_64/Include/object.h:705
#7 Py_XDECREF (op=<optimized out>) at /usr/src/debug/python3.12-3.12.4-1.fc40.x86_64/Include/object.h:798
#8 free_keys_object (interp=0x7ffff7d70cb8 <_PyRuntime+76440>, keys=0x7fff99467d20) at /usr/src/debug/python3.12-3.12.4-1.fc40.x86_64/Objects/dictobject.c:673
#9 0x00007ffff7968531 in dictkeys_decref (interp=0x7ffff7d70cb8 <_PyRuntime+76440>, dk=0x7fff99467d20) at /usr/src/debug/python3.12-3.12.4-1.fc40.x86_64/Objects/dictobject.c:333
#10 dict_dealloc (mp=0x7fff9946d440) at /usr/src/debug/python3.12-3.12.4-1.fc40.x86_64/Objects/dictobject.c:2374
#11 0x00007ffff7968797 in _Py_Dealloc (op=<optimized out>) at /usr/src/debug/python3.12-3.12.4-1.fc40.x86_64/Objects/object.c:2625
#12 Py_DECREF (op=<optimized out>) at /usr/src/debug/python3.12-3.12.4-1.fc40.x86_64/Include/object.h:705
#13 Py_XDECREF (op=<optimized out>) at /usr/src/debug/python3.12-3.12.4-1.fc40.x86_64/Include/object.h:798
#14 free_keys_object (interp=0x7ffff7d70cb8 <_PyRuntime+76440>, keys=0x7fff993724c0) at /usr/src/debug/python3.12-3.12.4-1.fc40.x86_64/Objects/dictobject.c:673
#15 0x00007ffff7968531 in dictkeys_decref (interp=0x7ffff7d70cb8 <_PyRuntime+76440>, dk=0x7fff993724c0) at /usr/src/debug/python3.12-3.12.4-1.fc40.x86_64/Objects/dictobject.c:333
#16 dict_dealloc (mp=0x7fff9908bd00) at /usr/src/debug/python3.12-3.12.4-1.fc40.x86_64/Objects/dictobject.c:2374
#17 0x00007fffe8f7bc85 in Py_DECREF (op=<optimized out>) at /usr/include/python3.12/object.h:706
#18 pygobject_clear (self=<optimized out>) at ../gi/pygobject-object.c:1243
#19 pygobject_dealloc (self=0x7fff99121000) at ../gi/pygobject-object.c:1129
#20 0x00007ffff79b42f5 in subtype_dealloc (self=0x7fff99121000) at /usr/src/debug/python3.12-3.12.4-1.fc40.x86_64/Objects/typeobject.c:2054
#21 0x00007ffff79771b0 in _PyEval_EvalFrameDefault (tstate=<optimized out>, frame=<optimized out>, throwflag=<optimized out>) at Python/bytecodes.c:2002
#22 0x00007ffff79b07b2 in _PyFunction_Vectorcall (func=0x7fff994f74c0, stack=0x7fffffffcf88, nargsf=1, kwnames=0x0) at /usr/src/debug/python3.12-3.12.4-1.fc40.x86_64/Objects/call.c:419
#23 _PyObject_VectorcallTstate (tstate=0x7ffff7dce5d8 <_PyRuntime+459704>, callable=0x7fff994f74c0, args=0x7fffffffcf88, nargsf=1, kwnames=0x0)
at /usr/src/debug/python3.12-3.12.4-1.fc40.x86_64/Include/internal/pycore_call.h:92
#24 method_vectorcall (method=<optimized out>, args=0x7ffff7d70c50 <_PyRuntime+76336>, nargsf=0, kwnames=0x0) at /usr/src/debug/python3.12-3.12.4-1.fc40.x86_64/Objects/classobject.c:69
#25 0x00007fffe8f932e2 in _pygi_closure_handle (cif=<optimized out>, result=<optimized out>, args=<optimized out>, data=<optimized out>) at ../gi/pygi-closure.c:582
#26 0x00007fffe8d6bb71 in ffi_closure_unix64_inner
(cif=<optimized out>, fun=<optimized out>, user_data=<optimized out>, rvalue=<optimized out>, reg_args=<optimized out>, argp=<optimized out>) at ../src/x86/ffi64.c:899
#27 0x00007fffe8d6c278 in ffi_closure_unix64 () at ../src/x86/unix64.S:303
#28 0x00007fffe8e5a69d in g_idle_dispatch (source=0x7fff64002100, callback=0x7ffff7dd09b0, user_data=0x7fff64002170) at ../glib/gmain.c:6150
#29 0x00007fffe8e53e8c in g_main_dispatch (context=0x55555589bd60) at ../glib/gmain.c:3344
#30 g_main_context_dispatch_unlocked (context=0x55555589bd60) at ../glib/gmain.c:4152
#31 0x00007fffe8eb5c98 in g_main_context_iterate_unlocked.isra.0 (context=0x55555589bd60, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../glib/gmain.c:4217
#32 0x00007fffe8e59f37 in g_main_loop_run (loop=0x55555589a840) at ../glib/gmain.c:4419
#33 0x00007fffe6fefb35 in gtk_main () at ../gtk/gtkmain.c:1329
#34 0x00007fffe8d6c056 in ffi_call_unix64 () at ../src/x86/unix64.S:104
#35 0x00007fffe8d686a0 in ffi_call_int (cif=cif@entry=0x55555589a5f8, fn=<optimized out>, rvalue=<optimized out>, avalue=<optimized out>, closure=closure@entry=0x0)
at ../src/x86/ffi64.c:673
#36 0x00007fffe8d6b4ee in ffi_call (cif=cif@entry=0x55555589a5f8, fn=<optimized out>, rvalue=rvalue@entry=0x7fffffffd668, avalue=<optimized out>) at ../src/x86/ffi64.c:710
#37 0x00007fffe8f94f5b in pygi_invoke_c_callable (function_cache=0x55555589a550, state=<optimized out>, py_args=<optimized out>, py_kwargs=<optimized out>) at ../gi/pygi-invoke.c:684
#38 0x00007fffe8f94018 in pygi_function_cache_invoke (function_cache=<optimized out>, py_args=0x7ffff7d70c38 <_PyRuntime+76312>, py_kwargs=0x7fffe9369300) at ../gi/pygi-cache.c:862
#39 pygi_callable_info_invoke (info=<optimized out>, py_args=0x7ffff7d70c38 <_PyRuntime+76312>, kwargs=0x7fffe9369300, cache=<optimized out>, user_data=0x0) at ../gi/pygi-invoke.c:727
#40 _wrap_g_callable_info_invoke (self=<optimized out>, py_args=0x7ffff7d70c38 <_PyRuntime+76312>, kwargs=0x7fffe9369300) at ../gi/pygi-invoke.c:764
#41 0x00007ffff799e049 in _PyObject_Call (tstate=0x7ffff7dce5d8 <_PyRuntime+459704>, callable=0x7fffe7932fb0, args=0x7ffff7d70c38 <_PyRuntime+76312>, kwargs=<optimized out>)
at /usr/src/debug/python3.12-3.12.4-1.fc40.x86_64/Objects/call.c:367
#42 0x00007ffff7976e45 in PyCFunction_Call (callable=0x7fffe7932fb0, args=0x7ffff7d70c38 <_PyRuntime+76312>, kwargs=0x7fffe9369300)
at /usr/src/debug/python3.12-3.12.4-1.fc40.x86_64/Objects/call.c:387
#43 _PyEval_EvalFrameDefault (tstate=<optimized out>, frame=<optimized out>, throwflag=<optimized out>) at Python/bytecodes.c:3262
#44 0x00007ffff79fdef4 in PyEval_EvalCode (co=0x5555555f9b50, globals=<optimized out>, locals=0x7fffe99f9c40) at /usr/src/debug/python3.12-3.12.4-1.fc40.x86_64/Python/ceval.c:578
#45 0x00007ffff7a2215a in run_eval_code_obj
(tstate=tstate@entry=0x7ffff7dce5d8 <_PyRuntime+459704>, co=co@entry=0x5555555f9b50, globals=globals@entry=0x7fffe99f9c40, locals=locals@entry=0x7fffe99f9c40)
at /usr/src/debug/python3.12-3.12.4-1.fc40.x86_64/Python/pythonrun.c:1722
#46 0x00007ffff7a1c8be in run_mod
(mod=mod@entry=0x555555642ec0, filename=filename@entry=0x7fffe98a4e70, globals=globals@entry=0x7fffe99f9c40, locals=locals@entry=0x7fffe99f9c40, flags=flags@entry=0x7fffffffdc00, arena=arena@entry=0x7fffe991be30) at /usr/src/debug/python3.12-3.12.4-1.fc40.x86_64/Python/pythonrun.c:1743
#47 0x00007ffff7a370f3 in pyrun_file
(fp=fp@entry=0x555555592550, filename=filename@entry=0x7fffe98a4e70, start=start@entry=257, globals=globals@entry=0x7fffe99f9c40, locals=locals@entry=0x7fffe99f9c40, closeit=closeit@entry=1, flags=0x7fffffffdc00) at /usr/src/debug/python3.12-3.12.4-1.fc40.x86_64/Python/pythonrun.c:1643
#48 0x00007ffff7a363ec in _PyRun_SimpleFileObject (fp=0x555555592550, filename=0x7fffe98a4e70, closeit=1, flags=0x7fffffffdc00)
--Type <RET> for more, q to quit, c to continue without paging--
at /usr/src/debug/python3.12-3.12.4-1.fc40.x86_64/Python/pythonrun.c:433
#49 0x00007ffff7a3600f in _PyRun_AnyFileObject (fp=0x555555592550, filename=0x7fffe98a4e70, closeit=1, flags=0x7fffffffdc00)
at /usr/src/debug/python3.12-3.12.4-1.fc40.x86_64/Python/pythonrun.c:78
#50 0x00007ffff7a2e7c3 in pymain_run_file_obj (program_name=0x7fffe98a5df0, filename=0x7fffe98a4e70, skip_source_first_line=0)
at /usr/src/debug/python3.12-3.12.4-1.fc40.x86_64/Modules/main.c:360
#51 pymain_run_file (config=0x7ffff7d711b8 <_PyRuntime+77720>) at /usr/src/debug/python3.12-3.12.4-1.fc40.x86_64/Modules/main.c:379
#52 pymain_run_python (exitcode=0x7fffffffdbd4) at /usr/src/debug/python3.12-3.12.4-1.fc40.x86_64/Modules/main.c:629
#53 Py_RunMain () at /usr/src/debug/python3.12-3.12.4-1.fc40.x86_64/Modules/main.c:709
#54 0x00007ffff79e606c in Py_BytesMain (argc=<optimized out>, argv=<optimized out>) at /usr/src/debug/python3.12-3.12.4-1.fc40.x86_64/Modules/main.c:763
#55 0x00007ffff7639088 in __libc_start_call_main (main=main@entry=0x555555555160 <main>, argc=argc@entry=8, argv=argv@entry=0x7fffffffde68) at ../sysdeps/nptl/libc_start_call_main.h:58
#56 0x00007ffff763914b in __libc_start_main_impl
(main=0x555555555160 <main>, argc=8, argv=0x7fffffffde68, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fffffffde58)
at ../csu/libc-start.c:360
#57 0x0000555555555095 in _start ()
The fix above is a little bit too involved for my liking, I will try to find a smaller patch to backport.
Seeing how much smaller the v3.1.x backport is, perhaps the fix for the newer branches could have been made smaller too. But after extensive testing, including python2 builds of v3.1.x (which still runs in 2024!) - I think we're good in all branches.
Reproducible semi-reliably by creating new system trays and destroying them, repeatedly. I used
tests/xpra/test_apps/test_system_tray.py
. With-d tray
the last messages shown are:gdb:
This feels like #3822 all over again. And the tray window is still creating
GdkX11.X11Window
.Unfortunately, changing
tray_window.destroy()
totray_window.unrealize()
does not help.