Possible leak in GTK4 accessibility backend
I'm currently trying to find out, why my application is memory leaking. I checked GTK4 inspector statistics, and everything gets freed correctly, expect GtkAtSpiContext
GtkATContext
and GObject
. The counts of these types are increasing infinitely, but everything else keeps constant. Could it be a leak in the new GTK4 accessibility backend?
Valgrind snippet
==55== 48,120 bytes in 1,203 blocks are still reachable in loss record 19,639 of 19,716
==55== at 0x4839853: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==55== by 0x5971358: g_malloc (gmem.c:106)
==55== by 0x5989A81: g_slice_alloc (gslice.c:1069)
==55== by 0x5941EF9: g_bytes_new_with_free_func (gbytes.c:186)
==55== by 0x59A82FC: g_variant_new_from_trusted (gvariant.c:325)
==55== by 0x59A82FC: g_variant_new_string (gvariant.c:1264)
==55== by 0x59AC307: g_variant_valist_new_nnp (gvariant.c:4796)
==55== by 0x59ADE41: g_variant_new_va (gvariant.c:5401)
==55== by 0x59AE3A0: g_variant_builder_add (gvariant.c:5558)
==55== by 0x502D80A: gtk_at_spi_context_register_object (gtkatspicontext.c:1269)
==55== by 0x502D80A: gtk_at_spi_context_realize (gtkatspicontext.c:1532)
==55== by 0x4D305A6: gtk_at_context_realize (gtkatcontext.c:553)
==55== by 0x4F731B9: gtk_widget_root (gtkwidget.c:2358)
==55== by 0x4F732CC: gtk_widget_forall (gtkwidget.c:11733)
==55== by 0x4F732CC: gtk_widget_real_root (gtkwidget.c:834)
==55==
==55== 48,120 bytes in 1,203 blocks are still reachable in loss record 19,640 of 19,716
==55== at 0x4839853: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==55== by 0x5971358: g_malloc (gmem.c:106)
==55== by 0x5989A81: g_slice_alloc (gslice.c:1069)
==55== by 0x5941EF9: g_bytes_new_with_free_func (gbytes.c:186)
==55== by 0x59A82FC: g_variant_new_from_trusted (gvariant.c:325)
==55== by 0x59A82FC: g_variant_new_string (gvariant.c:1264)
==55== by 0x59AC307: g_variant_valist_new_nnp (gvariant.c:4796)
==55== by 0x59ADE41: g_variant_new_va (gvariant.c:5401)
==55== by 0x59AE3A0: g_variant_builder_add (gvariant.c:5558)
==55== by 0x502D875: gtk_at_spi_context_register_object (gtkatspicontext.c:1283)
==55== by 0x502D875: gtk_at_spi_context_realize (gtkatspicontext.c:1532)
==55== by 0x4D305A6: gtk_at_context_realize (gtkatcontext.c:553)
==55== by 0x4F731B9: gtk_widget_root (gtkwidget.c:2358)
==55== by 0x4F732CC: gtk_widget_forall (gtkwidget.c:11733)
==55== by 0x4F732CC: gtk_widget_real_root (gtkwidget.c:834)
==55==
==55== 48,120 bytes in 1,203 blocks are still reachable in loss record 19,641 of 19,716
==55== at 0x4839853: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==55== by 0x5971358: g_malloc (gmem.c:106)
==55== by 0x5989A81: g_slice_alloc (gslice.c:1069)
==55== by 0x5941EF9: g_bytes_new_with_free_func (gbytes.c:186)
==55== by 0x59A82FC: g_variant_new_from_trusted (gvariant.c:325)
==55== by 0x59A82FC: g_variant_new_string (gvariant.c:1264)
==55== by 0x59AC307: g_variant_valist_new_nnp (gvariant.c:4796)
==55== by 0x59ADE41: g_variant_new_va (gvariant.c:5401)
==55== by 0x59AE3A0: g_variant_builder_add (gvariant.c:5558)
==55== by 0x502DA8C: gtk_at_spi_context_register_object (gtkatspicontext.c:1361)
==55== by 0x502DA8C: gtk_at_spi_context_realize (gtkatspicontext.c:1532)
==55== by 0x4D305A6: gtk_at_context_realize (gtkatcontext.c:553)
==55== by 0x4F731B9: gtk_widget_root (gtkwidget.c:2358)
==55== by 0x4F732CC: gtk_widget_forall (gtkwidget.c:11733)
==55== by 0x4F732CC: gtk_widget_real_root (gtkwidget.c:834)
==55==
==55== 48,128 bytes in 188 blocks are still reachable in loss record 19,642 of 19,716
==55== at 0x4839783: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==55== by 0x59713FF: g_realloc (gmem.c:171)
==55== by 0x4F92304: gtk_accels_reserve (gdkarrayimpl.c:172)
==55== by 0x4F92304: gtk_accels_splice (gdkarrayimpl.c:198)
==55== by 0x4F94186: gtk_accels_append (gdkarrayimpl.c:241)
==55== by 0x4F94186: gtk_accels_replace (gtkactionmuxer.c:91)
==55== by 0x4F94186: gtk_action_muxer_set_primary_accel (gtkactionmuxer.c:1372)
==55== by 0x4EB07F6: update_accel (gtkshortcutcontroller.c:473)
==55== by 0x4EB1146: gtk_shortcut_controller_set_widget (gtkshortcutcontroller.c:492)
==55== by 0x4F74BF5: gtk_widget_add_controller (gtkwidget.c:11168)
==55== by 0x58EE626: g_type_create_instance (gtype.c:1909)
==55== by 0x58D4374: g_object_new_internal (gobject.c:1939)
==55== by 0x58D610B: g_object_new_valist (gobject.c:2264)
==55== by 0x58D646C: g_object_new (gobject.c:1782)
==55== by 0x4E36D41: gtk_list_item_widget_new (gtklistitemwidget.c:460)
==55==
==55== 49,247 bytes in 41 blocks are still reachable in loss record 19,643 of 19,716
==55== at 0x483BDF9: calloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==55== by 0x400C2C3: _dl_new_object (dl-object.c:89)
==55== by 0x40077E5: _dl_map_object_from_fd (dl-load.c:997)
==55== by 0x400985C: _dl_map_object (dl-load.c:2218)
==55== by 0x400E3B4: openaux (dl-deps.c:64)
==55== by 0x5DE4AE7: _dl_catch_exception (dl-error-skeleton.c:208)
==55== by 0x400E7F2: _dl_map_object_deps (dl-deps.c:248)
==55== by 0x401458E: dl_open_worker (dl-open.c:571)
==55== by 0x5DE4AE7: _dl_catch_exception (dl-error-skeleton.c:208)
==55== by 0x40140CD: _dl_open (dl-open.c:837)
==55== by 0x5C6734B: dlopen_doit (dlopen.c:66)
==55== by 0x5DE4AE7: _dl_catch_exception (dl-error-skeleton.c:208)
==55==
==55== 53,270 bytes in 761 blocks are still reachable in loss record 19,644 of 19,716
==55== at 0x4839853: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==55== by 0x5971358: g_malloc (gmem.c:106)
==55== by 0x598B833: g_strdup (gstrfuncs.c:364)
==55== by 0x57E6DBC: g_dbus_connection_register_object (gdbusconnection.c:5191)
==55== by 0x502D837: gtk_at_spi_context_register_object (gtkatspicontext.c:1271)
==55== by 0x502D837: gtk_at_spi_context_realize (gtkatspicontext.c:1532)
==55== by 0x4D305A6: gtk_at_context_realize (gtkatcontext.c:553)
==55== by 0x4F731B9: gtk_widget_root (gtkwidget.c:2358)
==55== by 0x4F732CC: gtk_widget_forall (gtkwidget.c:11733)
==55== by 0x4F732CC: gtk_widget_real_root (gtkwidget.c:834)
==55== by 0x4F731C6: gtk_widget_root (gtkwidget.c:2361)
==55== by 0x4F732CC: gtk_widget_forall (gtkwidget.c:11733)
==55== by 0x4F732CC: gtk_widget_real_root (gtkwidget.c:834)
==55== by 0x4F731C6: gtk_widget_root (gtkwidget.c:2361)
==55== by 0x4F732CC: gtk_widget_forall (gtkwidget.c:11733)
==55== by 0x4F732CC: gtk_widget_real_root (gtkwidget.c:834)
I wanted to provide a detailed valgrind log, but now I cannot reproduce the leak anymore. So I hope this is enough information to find a "potential" issue :-)