ghostty/valgrind.supp
2025-07-17 13:29:42 -07:00

1930 lines
31 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# This Valgrind suppression file contains the suppressions necessary
# to run Ghostty with GTK under Valgrind. There may be some false suppressions
# here so we should scrutinize this file periodically.
#
# To run Ghostty under Valgrind:
#
# valgrind \
# --leak-check=full \
# --num-callers=50 \
# --suppressions=valgrind.supp \
# ./zig-out/bin/ghostty
#
# You must gracefully exit Ghostty (do not SIGINT) by closing all windows
# and quitting. Otherwise, we leave a number of GTK resources around.
# Weird gtk_tooltip_init leak I can't figure out
{
Non-builder tooltip create
Memcheck:Leak
match-leak-kinds: possible
...
fun:gtk_at_context_init
fun:g_type_create_instance
fun:g_object_new_internal.part.0
fun:g_object_new_valist
fun:g_object_new
fun:gtk_at_spi_create_context
fun:gtk_at_context_create
fun:gtk_widget_init
fun:g_type_create_instance
fun:g_object_new_internal.part.0
fun:g_object_new_with_properties
fun:g_object_new
fun:gtk_tooltip_init
...
}
{
Not sure about this one, I can't figure it out.
Memcheck:Leak
match-leak-kinds: possible
...
fun:gtk_accessible_attribute_set_new
fun:gtk_at_context_init
fun:g_type_create_instance
fun:g_object_new_internal.part.0
fun:g_object_new_valist
fun:g_object_new
fun:gtk_at_spi_create_context
fun:gtk_at_context_create
fun:gtk_widget_init
fun:g_type_create_instance
fun:g_object_new_internal.part.0
fun:g_object_new_with_properties
fun:g_object_new
fun:_gtk_builder_construct
fun:builder_construct
...
fun:_gtk_buildable_parser_replay_precompiled
fun:_gtk_builder_parser_parse_buffer
fun:gtk_builder_extend_with_template
fun:gtk_widget_init_template
fun:g_type_create_instance
fun:g_object_new_internal.part.0
fun:g_object_new_with_properties
fun:g_object_new
fun:gtk_tooltip_init
...
}
{
GTK init
Memcheck:Leak
match-leak-kinds: possible
...
fun:gtk_init
}
{
GTK init
Memcheck:Leak
match-leak-kinds: possible
...
fun:gtk_init
}
{
GTK FontConfig data is never freed
Memcheck:Leak
match-leak-kinds: possible
...
fun:FcConfigInit
fun:fc_thread_func
fun:g_thread_proxy
fun:start_thread
fun:clone
}
{
GTK EGL resources never freed
Memcheck:Leak
match-leak-kinds: possible
...
fun:__eglLoadVendors
fun:eglQueryString
fun:epoxy_has_egl_extension
fun:gdk_display_init_egl
}
{
GTK EGL dlopen never freed
Memcheck:Leak
match-leak-kinds: possible
...
fun:dlopen@@GLIBC_*
fun:get_dlopen_handle.part.0
fun:epoxy_has_egl
fun:gdk_display_init_egl
}
{
libgl init never frees
Memcheck:Leak
match-leak-kinds: possible
fun:malloc
fun:RegisterStubCallbacks
fun:__glDispatchRegisterStubCallbacks
fun:__libGLInit
...
}
{
pango font map
Memcheck:Leak
match-leak-kinds: possible
fun:calloc
fun:g_malloc0
fun:g_rc_box_alloc_full
fun:pango_fc_font_map_load_fontset
...
}
{
pango font map to cairgo
Memcheck:Leak
match-leak-kinds: possible
fun:malloc
...
fun:FcConfigValues
fun:FcConfigSubstituteWithPat
fun:FcConfigSubstitute
fun:pango_cairo_fc_font_map_fontset_key_substitute
fun:pango_fc_font_map_load_fontset
...
}
{
Adwaita Stylesheet Load
Memcheck:Leak
match-leak-kinds: definite
fun:calloc
fun:g_malloc0
fun:gtk_css_value_alloc
fun:_gtk_css_reference_value_new
fun:parse_ruleset
fun:gtk_css_provider_load_internal
fun:gtk_css_provider_load_from_file
fun:gtk_css_provider_load_from_resource
fun:update_stylesheet
fun:g_object_new_internal.part.0
fun:g_object_new_valist
fun:g_object_new
}
# Mesa leaks all sorts of stuff that we can't directly control,
# so we ignore all of that.
{
Mesa
Memcheck:Leak
match-leak-kinds: possible
...
fun:_mesa_*
}
{
Mesa
Memcheck:Leak
match-leak-kinds: possible
...
fun:mesa_*
}
{
Graphics Driver dri
Memcheck:Leak
match-leak-kinds: possible
fun:*alloc
...
fun:dri*
}
{
Radeon
Memcheck:Leak
match-leak-kinds: possible
fun:*alloc
...
fun:radeonsi_*
}
{
Mesa Shader
Memcheck:Leak
match-leak-kinds: possible
...
fun:si_*
}
#--------------------------------------------------------------------
# GTK
#--------------------------------------------------------------------
# Actual GTK things
{
GtkWidgetClass action GPtrArray
Memcheck:Leak
fun:malloc
fun:g_malloc
fun:g_slice_alloc
fun:g_ptr_array_sized_new
fun:g_ptr_array_new
fun:gtk_widget_class_add_action
}
{
GIO modules
Memcheck:Leak
match-leak-kinds: definite
fun:calloc
...
fun:_g_io_module_get_default
}
{
GTK media extension gio modules
Memcheck:Leak
match-leak-kinds: definite
fun:calloc
...
fun:g_io_module_new
...
fun:gtk_media_file_extension_init
}
# AMD driver
{
radeonsi_dri general
Memcheck:Leak
fun:calloc
...
obj:/usr/lib*/dri/radeonsi_dri.so
}
{
radeonsi_dri general
Memcheck:Leak
fun:malloc
...
obj:/usr/lib*/dri/radeonsi_dri.so
}
# mesa driver stuff
{
i965 addr4
Memcheck:Addr4
obj:/usr/lib*/dri/i965_dri.so*
}
{
i965 addr8
Memcheck:Addr8
obj:/usr/lib*/dri/i965_dri.so*
}
{
i965 memcpy
Memcheck:Addr8
fun:memcpy*
obj:/usr/lib*/dri/i965_dri.so*
}
{
i965 memcpy
Memcheck:Addr2
fun:memcpy*
obj:/usr/lib*/dri/i965_dri.so*
}
{
mesa memcmp 8
Memcheck:Addr8
fun:*memcmp*
obj:/usr/lib*/dri/i965_dri.so*
}
{
mesa memcmp 1
Memcheck:Addr1
fun:*memcmp*
obj:/usr/lib*/dri/i965_dri.so*
}
{
mesa memset 8
Memcheck:Addr8
fun:*memset*
obj:/usr/lib*/dri/i965_dri.so
}
{
mesa realpath
Memcheck:Leak
match-leak-kinds: definite
fun:malloc
fun:realpath@@GLIBC_2.3
obj:*
obj:*
obj:*
obj:*
obj:*
obj:*
obj:*
obj:*
fun:epoxy_eglInitialize_global_rewrite_ptr
}
{
mesa calloc
Memcheck:Leak
match-leak-kinds: definite
fun:calloc
obj:*
obj:*
obj:*
obj:*
obj:*
obj:*
obj:*
obj:*
obj:*
fun:epoxy_eglInitialize_global_rewrite_ptr
}
{
epoxy strncmp
Memcheck:Addr8
fun:strncmp
...
fun:epoxy_eglInitialize_global_rewrite_ptr
}
{
mesa malloc
Memcheck:Leak
match-leak-kinds: definite
fun:malloc
obj:/usr/lib*/dri/i965_dri.so*
}
{
mesa glReadPixels
Memcheck:Addr16
obj:*
obj:*
obj:*
obj:*
obj:*
fun:epoxy_glReadPixels_global_rewrite_ptr
}
{
epoxy glxQueryServerString 1
Memcheck:Leak
fun:malloc
fun:XextAddDisplay
obj:*
obj:*
obj:*
obj:*
obj:*
fun:epoxy_glXQueryServerString_global_rewrite_ptr
}
{
epoxy glxQueryServerString 2
Memcheck:Leak
match-leak-kinds: definite
fun:malloc
fun:realpath*
obj:*
obj:*
obj:*
obj:*
obj:*
obj:*
obj:*
fun:epoxy_glXQueryServerString_global_rewrite_ptr
}
{
epoxy glGetTexImage
Memcheck:Addr16
obj:*
obj:*
obj:*
obj:*
obj:*
fun:epoxy_glGetTexImage_global_rewrite_ptr
}
# Fontconfig
{
FcFontSetList
Memcheck:Leak
match-leak-kinds: definite
fun:malloc
obj:/usr/lib*/libfontconfig.so*
obj:/usr/lib*/libfontconfig.so*
fun:FcFontSetList
}
{
FcPatternObjectInsertElt
Memcheck:Leak
match-leak-kinds: definite
fun:malloc
fun:FcPatternObjectInsertElt
}
{
FcPatternObjectInsertElt2
Memcheck:Leak
match-leak-kinds: definite
fun:realloc
fun:FcPatternObjectInsertElt
}
{
FcFontRenderPrepare
Memcheck:Leak
match-leak-kinds: definite
fun:realloc
obj:/usr/lib*/libfontconfig.so*
obj:/usr/lib*/libfontconfig.so*
fun:FcFontRenderPrepare
}
{
FcDefaultSubstitute
Memcheck:Leak
match-leak-kinds: definite
fun:realloc
obj:/usr/lib*/libfontconfig.so*
obj:/usr/lib*/libfontconfig.so*
fun:FcDefaultSubstitute
}
{
FcDefaultSubstituteWithPat
Memcheck:Leak
match-leak-kinds: definite
fun:realloc
obj:/usr/lib*/libfontconfig.so*
obj:/usr/lib*/libfontconfig.so*
fun:FcDefaultSubstituteWithPat
}
{
FcConfigSubstituteWithPat
Memcheck:Leak
match-leak-kinds: definite
fun:realloc
obj:/usr/lib*/libfontconfig.so*
obj:/usr/lib*/libfontconfig.so*
fun:FcConfigSubstituteWithPat
}
# Pixman
{
pixman_image_composite32
Memcheck:Cond
obj:/usr/lib*/libpixman-1.so*
obj:/usr/lib*/libpixman-1.so*
fun:pixman_image_composite32
}
# Pango
{
pango 1
Memcheck:Leak
match-leak-kinds: definite
fun:realloc
obj:/usr/lib*/libfontconfig.so*
obj:/usr/lib*/libfontconfig.so*
obj:/usr/lib*/libcairo.so*
fun:pango_cairo_fc_font_map_fontset_key_substitute
}
{
pango 2
Memcheck:Leak
fun:realloc
obj:/usr/lib*/libfontconfig.so*
obj:/usr/lib*/libfontconfig.so*
fun:_cairo_ft_font_options_substitute
}
# GLib
{
glib GQuark
Memcheck:Leak
match-leak-kinds: definite
fun:malloc
...
fun:g_quark_*
}
{
glib GQuark
Memcheck:Leak
match-leak-kinds: definite
fun:malloc
...
fun:g_intern_static_string
}
{
glib GQuark
Memcheck:Leak
match-leak-kinds: definite
fun:malloc
...
fun:g_intern_string
}
{
xdg-mime init
Memcheck:Leak
match-leak-kinds: definite
fun:malloc
...
fun:xdg_mime_init*
}
{
xdg-mime init
Memcheck:Leak
match-leak-kinds: definite
fun:calloc
...
fun:xdg_mime_init*
}
{
glib init
Memcheck:Leak
match-leak-kinds: definite
fun:malloc
...
fun:glib_init_ctor
}
# Threads
{
pthread
Memcheck:Leak
fun:calloc
fun:_dl_allocate_tls
}
#--------------------------------------------------------------------
# GLib
#--------------------------------------------------------------------
# GLib Valgrind suppressions file
#
# This provides a list of suppressions for all of GLib (including GIO), for all
# Valgrind tools (memcheck, drd, helgrind, etc.) for the false positives and
# deliberate one-time leaks which GLib causes to be reported when running under
# Valgrind.
#
# When running an application which links to GLib under Valgrind, you can pass
# this suppression file to Valgrind using --suppressions=/path/to/glib-2.0.supp.
#
# http://valgrind.org/docs/manual/manual-core.html#manual-core.suppress
#
# Note that there is currently no way for Valgrind to load this automatically
# (https://bugs.kde.org/show_bug.cgi?id=160905), so the best GLib can currently
# do is to install this file as part of its development package.
#
# This file should be updated if GLib introduces a new deliberate one-time leak,
# or another false race positive in Valgrind: please file bugs at:
#
# https://gitlab.gnome.org/GNOME/glib/issues/new
{
gnutls-init-calloc
Memcheck:Leak
match-leak-kinds:reachable
fun:calloc
...
fun:gtls_gnutls_init
}
{
gnutls-init-realloc
Memcheck:Leak
match-leak-kinds:reachable
fun:realloc
...
fun:gtls_gnutls_init
}
{
g-tls-backend-gnutls-init
Memcheck:Leak
match-leak-kinds:reachable
fun:g_once_impl
fun:g_tls_backend_gnutls_init
}
{
p11-tokens-init
Memcheck:Leak
match-leak-kinds:reachable
fun:calloc
...
fun:create_tokens_inlock
fun:initialize_module_inlock_reentrant
}
# One-time allocation from libc for getpwnam() results
{
g-local-vfs-getpwnam
Memcheck:Leak
match-leak-kinds:reachable
fun:malloc
...
fun:getpwnam
fun:g_local_vfs_parse_name
}
{
glib-init-malloc
Memcheck:Leak
match-leak-kinds:reachable
fun:malloc
...
fun:g_quark_init
}
{
glib-init-calloc
Memcheck:Leak
match-leak-kinds:reachable
fun:calloc
...
fun:g_quark_init
}
{
gobject-init-malloc
Memcheck:Leak
match-leak-kinds:reachable
fun:malloc
...
fun:gobject_init*
}
{
gobject-init-realloc
Memcheck:Leak
match-leak-kinds:reachable
fun:realloc
...
fun:gobject_init*
}
{
gobject-init-calloc
Memcheck:Leak
match-leak-kinds:possible,reachable
fun:calloc
...
fun:gobject_init*
}
{
g-type-register-dynamic
Memcheck:Leak
match-leak-kinds:reachable
fun:malloc
...
fun:g_type_register_dynamic
}
{
g-type-register-static
Memcheck:Leak
match-leak-kinds:possible,reachable
fun:malloc
...
fun:g_type_register_static
}
{
g-type-register-static-realloc
Memcheck:Leak
match-leak-kinds:possible,reachable
fun:realloc
...
fun:g_type_register_static
}
{
g-type-register-static-calloc
Memcheck:Leak
match-leak-kinds:possible,reachable
fun:calloc
...
fun:g_type_register_static
}
{
g-type-register-fundamental
Memcheck:Leak
match-leak-kinds:possible,reachable
fun:malloc
...
fun:g_type_register_fundamental
}
{
g-type-register-fundamental-calloc
Memcheck:Leak
match-leak-kinds:possible,reachable
fun:calloc
...
fun:g_type_register_fundamental
}
{
g-type-add-interface-dynamic
Memcheck:Leak
match-leak-kinds:reachable
fun:malloc
...
fun:g_type_add_interface_dynamic
}
{
g-type-add-interface-static
Memcheck:Leak
match-leak-kinds:reachable
fun:malloc
...
fun:g_type_add_interface_static
}
{
g-type-add-interface-static-realloc
Memcheck:Leak
match-leak-kinds:reachable
fun:realloc
...
fun:g_type_add_interface_static
}
{
g-type-add-interface-static-calloc
Memcheck:Leak
match-leak-kinds:reachable
fun:calloc
...
fun:g_type_add_interface_static
}
{
g-test-rand-init
Memcheck:Leak
match-leak-kinds:reachable
fun:calloc
...
fun:g_rand_new_with_seed_array
fun:test_run_seed
...
fun:g_test_run
}
{
g-rand-init2
Memcheck:Leak
match-leak-kinds:reachable
fun:calloc
...
fun:g_rand_new_with_seed_array
...
fun:get_global_random
}
{
g-quark-table-new
Memcheck:Leak
match-leak-kinds:reachable
fun:g_hash_table_new
...
fun:quark_new
}
{
g-quark-table-resize
Memcheck:Leak
match-leak-kinds:reachable
...
fun:g_hash_table_resize
...
fun:quark_new
}
{
g-type-interface-init
Memcheck:Leak
match-leak-kinds:reachable
fun:malloc
...
fun:type_iface_vtable_base_init_Wm
}
{
g-type-class-init-calloc
Memcheck:Leak
match-leak-kinds:reachable
fun:calloc
...
fun:type_class_init_Wm
}
{
g-type-class-init
Memcheck:Leak
match-leak-kinds:reachable
fun:g_type_create_instance
...
fun:type_class_init_Wm
}
{
g-object-do-class-init-signals
Memcheck:Leak
match-leak-kinds:reachable
...
fun:g_signal_new
...
fun:type_class_init_Wm
}
{
g-type-prerequisites
Memcheck:Leak
match-leak-kinds:reachable
fun:realloc
...
fun:type_iface_add_prerequisite_W
}
{
g-type-add-interface-check
Memcheck:Leak
match-leak-kinds:reachable
fun:malloc
...
fun:g_type_add_interface_check
...
fun:type_class_init_Wm
}
{
g-type-add-interface-check-realloc
Memcheck:Leak
match-leak-kinds:reachable
fun:realloc
...
fun:g_type_add_interface_check
...
fun:type_class_init_Wm
}
{
g-object-class-install-property
Memcheck:Leak
match-leak-kinds:reachable
fun:malloc
...
fun:validate_and_install_class_property
...
fun:type_class_init_Wm
}
{
g-param-spec-pool-new
Memcheck:Leak
match-leak-kinds:reachable
fun:malloc
...
fun:g_param_spec_pool_new
...
fun:type_class_init_Wm
}
# weak_locations_lock in gobject.c
{
g-weak-ref-lock
Memcheck:Leak
match-leak-kinds:reachable
fun:malloc
...
fun:g_rw_lock_get_impl
...
fun:g_weak_ref_set
}
{
g-object-base-class-init-construct-pproperties
Memcheck:Leak
match-leak-kinds:reachable
fun:malloc
...
fun:g_slist_copy
fun:g_object_base_class_init
fun:type_class_init_Wm
}
{
g-type-class-ref
Memcheck:Leak
fun:calloc
...
fun:type_class_init_Wm
...
fun:g_type_class_ref
}
{
g-type-class-ref-inlined
Memcheck:Leak
fun:calloc
...
fun:UnknownInlinedFun
...
fun:g_type_class_ref
}
{
g-io-module-default-singleton-malloc
Memcheck:Leak
match-leak-kinds:reachable
fun:malloc
...
fun:g_type_create_instance
...
fun:_g_io_module_get_default
}
{
g-io-module-default-singleton-calloc
Memcheck:Leak
match-leak-kinds:reachable,definite
fun:calloc
...
fun:g_type_create_instance
...
fun:_g_io_module_get_default*
}
# This one seems to show up sometimes with g_type_create_instance() at the top
# of the stack, as well.
{
g-io-module-default-singleton
Memcheck:Leak
match-leak-kinds:reachable
fun:g_type_create_instance
...
fun:_g_io_module_get_default
}
{
g-io-module-default-singleton-module
Memcheck:Leak
match-leak-kinds:reachable
fun:calloc
...
fun:g_module_open
...
fun:_g_io_module_get_default
}
{
g-io-module-default-singleton-name
Memcheck:Leak
match-leak-kinds:reachable
fun:malloc
...
fun:g_strdup
...
fun:_g_io_module_get_default*
}
{
g-io-module-default-singleton-weak-ref
Memcheck:Leak
fun:calloc
...
fun:_g_io_module_get_default
}
{
g-get-language-names-malloc
Memcheck:Leak
match-leak-kinds:reachable
fun:malloc
...
fun:g_get_language_names
}
{
g-get-language-names-calloc
Memcheck:Leak
match-leak-kinds:reachable
fun:calloc
...
fun:g_get_language_names
}
{
g-get-language_names-with-category-malloc
Memcheck:Leak
match-leak-kinds:possible,reachable,definite
fun:malloc
...
fun:g_get_language_names_with_category
}
{
g-get-language_names-with-category-calloc
Memcheck:Leak
match-leak-kinds:possible,reachable,definite
fun:calloc
...
fun:g_get_language_names_with_category
}
{
g-get-language_names-with-category-realloc
Memcheck:Leak
match-leak-kinds:possible,reachable,definite
fun:realloc
...
fun:g_get_language_names_with_category
}
{
g-static-mutex
Memcheck:Leak
match-leak-kinds:reachable
fun:malloc
...
fun:g_static_mutex_get_mutex_impl
}
{
g-system-thread-init
Memcheck:Leak
match-leak-kinds:possible,reachable
fun:calloc
...
fun:g_system_thread_new
}
{
g-system-thread-init-malloc
Memcheck:Leak
match-leak-kinds:possible,reachable,definite
fun:malloc
...
fun:g_system_thread_new
}
{
g-task-thread-pool-init
Memcheck:Leak
match-leak-kinds:possible,reachable,definite
fun:malloc
...
fun:g_thread_new
...
fun:g_task_thread_pool_init
}
{
g-io-module-default-proxy-resolver-gnome
Memcheck:Leak
match-leak-kinds:reachable
fun:calloc
...
fun:g_proxy_resolver_gnome_init
...
fun:_g_io_module_get_default
}
# One-time getaddrinfo() configuration loading
{
g-threaded-resolver-getaddrinfo-config
Memcheck:Leak
match-leak-kinds:reachable,definite
fun:malloc
...
fun:__resolv_conf_allocate
...
fun:getaddrinfo
fun:do_lookup_by_name
}
# memcheck checks that the third argument to ioctl() is a valid pointer, but
# some ioctls use that argument as an integer
{
ioctl-with-non-pointer-param
Memcheck:Param
ioctl(generic)
fun:ioctl
fun:btrfs_reflink_with_progress
}
{
g-private-get
drd:ConflictingAccess
fun:g_private_get
}
{
g-private-get-helgrind
Helgrind:Race
fun:g_private_get
}
{
g-private-set
drd:ConflictingAccess
fun:g_private_set
}
{
g-private-set-helgrind
Helgrind:Race
fun:g_private_set
}
{
g-type-construct-free
drd:ConflictingAccess
fun:g_type_free_instance
}
{
g-type-construct-free-helgrind
Helgrind:Race
fun:g_type_free_instance
}
{
g-variant-unref
drd:ConflictingAccess
fun:g_variant_unref
}
{
g-variant-unref-helgrind
Helgrind:Race
fun:g_variant_unref
}
{
g-unix-signals-main
drd:ConflictingAccess
fun:_g_main_create_unix_signal_watch
}
{
g-unix-signals-dispatch
drd:ConflictingAccess
...
fun:dispatch_unix_signals*
}
{
g-unix-signals-dispatch-helgrind
Helgrind:Race
...
fun:dispatch_unix_signals*
}
{
g-unix-signals-other
drd:ConflictingAccess
fun:g_unix_signal_watch*
}
{
g-unix-signals-other-helgrind
Helgrind:Race
fun:g_unix_signal_watch*
}
{
g-unix-signals-handler
drd:ConflictingAccess
fun:g_unix_signal_handler*
}
{
g-unix-signals-handler-helgrind
Helgrind:Race
fun:g_unix_signal_handler*
}
{
g-unix-signals-worker
drd:ConflictingAccess
fun:glib_worker_main
}
{
g-unix-signals-worker-helgrind
Helgrind:Race
fun:glib_worker_main
}
{
g-wakeup-acknowledge
drd:ConflictingAccess
fun:read
fun:g_wakeup_acknowledge
}
{
g-type-fundamental
drd:ConflictingAccess
fun:g_type_fundamental
}
{
g-type-fundamental-helgrind
Helgrind:Race
fun:g_type_fundamental
}
{
g-type-class-peek-static
drd:ConflictingAccess
fun:g_type_class_peek_static
}
{
g-type-class-peek-static-helgrind
Helgrind:Race
fun:g_type_class_peek_static
}
{
g-type-is-a
drd:ConflictingAccess
...
fun:g_type_is_a
}
{
g-type-is-a-helgrind
Helgrind:Race
...
fun:g_type_is_a
}
{
g-inet-address-get-type
drd:ConflictingAccess
fun:g_inet_address_get_type
}
{
g-inet-address-get-type-helgrind
Helgrind:Race
fun:g_inet_address_get_type
}
# From: https://github.com/fredericgermain/valgrind/blob/HEAD/glibc-2.X-drd.supp
{
drd-libc-stdio
drd:ConflictingAccess
obj:*/lib*/libc-*
}
{
drd-libc-recv
drd:ConflictingAccess
fun:recv
}
{
drd-libc-send
drd:ConflictingAccess
fun:send
}
# GSources do an opportunistic ref count check
{
g-source-set-ready-time
drd:ConflictingAccess
fun:g_source_set_ready_time
}
{
g-source-set-ready-time-helgrind
Helgrind:Race
fun:g_source_set_ready_time
}
{
g-source-iter-next
Helgrind:Race
fun:g_source_iter_next
fun:g_main_context_*
fun:g_main_context_iterate
}
{
g-object-instance-private
drd:ConflictingAccess
fun:*_get_instance_private
}
{
g-object-instance-private-helgrind
Helgrind:Race
fun:*_get_instance_private
}
# GLib legitimately calls pthread_cond_signal without a mutex held
{
g-task-thread-complete
drd:CondErr
...
fun:g_cond_signal
fun:g_task_thread_complete
}
{
g-task-thread-complete
Helgrind:Misc
...
fun:g_cond_signal
fun:g_task_thread_complete
}
# False positive, but I can't explain how (FIXME)
{
g-task-cond
Helgrind:Misc
...
fun:g_cond_clear
fun:g_task_finalize
}
# Real race, but is_cancelled() is an opportunistic function anyway
{
g-cancellable-is-cancelled
Helgrind:Race
fun:g_cancellable_is_cancelled
}
# False positive
{
g-main-context-cond
Helgrind:Misc
...
fun:g_cond_clear
fun:g_main_context_unref
}
# False positives
{
g-source-unlocked
Helgrind:Race
fun:g_source_*_unlocked
}
{
g-source-internal
Helgrind:Race
fun:g_source_*_internal
}
# False positive
{
g_object_real_dispose
Helgrind:Race
fun:g_object_real_dispose
}
# False positive
{
g_object_new_valist
Helgrind:Race
...
fun:g_object_new_valist
}
# g_set_user_dirs() deliberately leaks the previous cached g_get_user_*() values.
# These will not all be reachable on exit.
{
g_set_user_dirs_str
Memcheck:Leak
match-leak-kinds:definite,reachable,possible
fun:malloc
...
fun:set_str_if_different
fun:g_set_user_dirs
}
# g_set_user_dirs() deliberately leaks the previous cached g_get_user_*() values.
# These will not all be reachable on exit.
{
g_set_user_dirs_strv
Memcheck:Leak
match-leak-kinds:definite,reachable,possible
fun:malloc
...
fun:set_strv_if_different
fun:g_set_user_dirs
}
# _g_unset_cached_tmp_dir() deliberately leaks the previous cached g_get_tmp_dir() values.
# These will not all be reachable on exit.
{
g_get_tmp_dir_test_init
Memcheck:Leak
match-leak-kinds:definite,reachable
fun:malloc
...
fun:g_get_tmp_dir
...
fun:g_test_init
}
# g_get_tmp_dir() caches a one-time allocation
{
g_get_tmp_dir
Memcheck:Leak
match-leak-kinds:definite,reachable
fun:malloc
...
fun:g_get_tmp_dir
}
# g_get_system_data_dirs() caches a one-time allocation
{
g_get_system_data_dirs
Memcheck:Leak
match-leak-kinds:definite,reachable
fun:malloc
...
fun:g_build_system_data_dirs
fun:g_get_system_data_dirs
}
# g_get_user_data_dir() caches a one-time allocation
{
g_get_user_data_dir
Memcheck:Leak
match-leak-kinds:definite,reachable
fun:realloc
...
fun:g_build_user_data_dir
fun:g_get_user_data_dir
}
# g_get_home_dir() caches a one-time allocation
{
g_get_home_dir
Memcheck:Leak
match-leak-kinds:definite,reachable
fun:malloc
...
fun:g_build_home_dir
fun:g_get_home_dir
}
# gcontenttype-fdo.c caches a one-time allocation global array of @global_mime_dirs.
{
content_type_mime_dirs_realloc
Memcheck:Leak
match-leak-kinds:reachable
fun:realloc
...
fun:_g_content_type_set_mime_dirs_locked
}
# gdesktopappinfo.c caches a one-time allocation global table of @desktop_file_dirs.
{
desktop_file_dirs_malloc
Memcheck:Leak
match-leak-kinds:reachable
fun:malloc
...
fun:desktop_file_dirs_lock
}
# gdesktopappinfo.c caches a one-time allocation global table of @desktop_file_dirs.
{
desktop_file_dirs_realloc
Memcheck:Leak
match-leak-kinds:reachable
fun:realloc
...
fun:desktop_file_dirs_lock
}
# gdesktopappinfo.c caches a one-time allocation global table of @desktop_file_dirs.
{
desktop_file_dir_unindexed_setup_search
Memcheck:Leak
match-leak-kinds:reachable
fun:malloc
...
fun:desktop_file_dir_unindexed_setup_search
fun:desktop_file_dir_unindexed_setup_search
}
#gutils.c caches system and user dirs and may need to replace them during tests.
{
g_build_user_data_dir
Memcheck:Leak
match-leak-kinds:definite
fun:malloc
...
fun:g_build_user_data_dir
}
#gutils.c caches system and user dirs and may need to replace them during tests.
{
g_build_filename
Memcheck:Leak
match-leak-kinds:definite
fun:malloc
...
fun:g_build_filename
}
#gutils.c caches system and user dirs and may need to replace them during tests.
{
g_build_home_dir
Memcheck:Leak
match-leak-kinds:definite
fun:malloc
...
fun:g_build_home_dir
}
#gutils.c caches system and user dirs and may need to replace them during tests.
{
g_build_path
Memcheck:Leak
match-leak-kinds:definite
fun:malloc
...
fun:g_build_path
}
#gutils.c caches system and user dirs and may need to replace them during tests.
{
g_build_system_config_dirs
Memcheck:Leak
match-leak-kinds:definite
fun:realloc
...
fun:g_build_system_config_dirs
}
#gutils.c caches system and user dirs and may need to replace them during tests.
{
g_build_system_data_dir
Memcheck:Leak
match-leak-kinds:definite
fun:malloc
...
fun:g_build_system_data_dir
}
#gutils.c caches system and user dirs and may need to replace them during tests.
{
g_build_system_data_dirs
Memcheck:Leak
match-leak-kinds:definite
fun:realloc
...
fun:g_build_system_data_dirs
}
#gutils.c caches system and user dirs and may need to replace them during tests.
{
g_build_user_cache_dir
Memcheck:Leak
match-leak-kinds:definite
fun:malloc
...
fun:g_build_user_cache_dir
}
#gutils.c caches system and user dirs and may need to replace them during tests.
{
g_build_user_config_dir
Memcheck:Leak
match-leak-kinds:definite
fun:malloc
...
fun:g_build_user_config_dir
}
#gutils.c caches system and user dirs and may need to replace them during tests.
{
g_build_user_data_dir
Memcheck:Leak
match-leak-kinds:definite
fun:malloc
...
fun:g_build_user_data_dir
}
#gutils.c caches system and user dirs and may need to replace them during tests.
{
g_build_user_runtime_dir
Memcheck:Leak
match-leak-kinds:definite
fun:malloc
...
fun:g_build_user_runtime_dir
}
#gutils.c caches system and user dirs and may need to replace them during tests.
{
g_build_user_state_dir
Memcheck:Leak
match-leak-kinds:definite
fun:malloc
...
fun:g_build_user_state_dir
}
# g_io_extension_point_register() caches a one-time allocation global table of @extension_points.
{
g_io_extension_point_register
Memcheck:Leak
match-leak-kinds:reachable
fun:calloc
...
fun:g_io_extension_point_register
}
# g_strerror() caches a one-time allocation global table of @errors.
{
g_strerror
Memcheck:Leak
match-leak-kinds:reachable
fun:malloc
...
fun:g_locale_to_utf8
fun:g_strerror
}
# g_socket_connection_factory_register_type() caches a one-time allocation global table of @connection_types.
{
g_socket_connection_factory_register_type
Memcheck:Leak
match-leak-kinds:reachable
fun:calloc
...
fun:g_socket_connection_factory_register_type
}
# g_dbus_error_quark() never unregisters itself as a GDBusError domain, as its always available
{
g_dbus_error_quark
Memcheck:Leak
match-leak-kinds:reachable
fun:calloc
...
fun:g_dbus_error_register_error_domain
fun:g_dbus_error_quark
}
# g_win32_registry_get_os_dirs_w*() caches an array of strings that is allocated only once.
{
g_win32_registry_get_os_dirs
Memcheck:Leak
match-leak-kinds:reachable,definite
fun:malloc
...
fun:g_win32_registry_get_os_dirs*
}
# Thread-private data allocated once per thread
{
g_private_set_alloc0
Memcheck:Leak
match-leak-kinds:definite,reachable
fun:malloc
...
fun:g_private_set_alloc0
}
{
g_private_set_alloc0-calloc
Memcheck:Leak
match-leak-kinds:definite,reachable
fun:calloc
...
fun:g_private_set_alloc0
}
# Keys for thread-private data
{
g_private_key
Memcheck:Leak
match-leak-kinds:reachable
fun:malloc
fun:g_private_impl_new
}
# Thread-private GMainContext stack
{
g_main_context_push_thread_default
Memcheck:Leak
match-leak-kinds:definite,reachable
fun:malloc
...
fun:g_queue_new
fun:g_main_context_push_thread_default
}
# One-time allocations for #GFileInfo attribute cache
{
g_file_info_attribute_cache
Memcheck:Leak
match-leak-kinds:reachable
fun:malloc
...
fun:ensure_attribute_hash
...
fun:g_file_*
}
{
g_file_info_attribute_cache2
Memcheck:Leak
match-leak-kinds:reachable
fun:calloc
...
fun:ensure_attribute_hash
...
fun:g_file_*
}
{
g_file_info_attribute_cache3
Memcheck:Leak
match-leak-kinds:reachable
fun:malloc
...
fun:lookup_namespace
...
fun:g_file_*
}
{
g_file_info_attribute_cache4
Memcheck:Leak
match-leak-kinds:reachable
fun:calloc
...
fun:lookup_namespace
...
fun:g_file_*
}
# Cached charset
{
g_get_charset
Memcheck:Leak
match-leak-kinds:reachable
fun:malloc
...
fun:g_get_charset
}
{
g_get_charset_calloc
Memcheck:Leak
match-leak-kinds:reachable
fun:calloc
...
fun:g_get_charset
}
# Global unused thread queue
{
g_thread_pool_unused_thread_queue
Memcheck:Leak
match-leak-kinds:reachable
fun:malloc
...
fun:g_async_queue_new_full
...
fun:g_thread_pool_new
}
# One-time program name storage
{
g_set_prgname
Memcheck:Leak
match-leak-kinds:reachable
fun:malloc
...
fun:g_set_prgname
}
# Error domains hash
{
g_error_init
Memcheck:Leak
match-leak-kinds: reachable
fun:malloc
...
fun:g_hash_table_new_full
fun:g_error_init
}
# Error domain static registration
{
g_error_domain_register_static
Memcheck:Leak
match-leak-kinds: reachable
fun:malloc
...
fun:g_hash_table_insert
fun:error_domain_register
fun:g_error_domain_register_static
}
{
new_quark
Memcheck:Leak
match-leak-kinds:reachable
fun:malloc
...
fun:g_hash_table_insert
fun:quark_new
}
{
xdg_mime_init_malloc
Memcheck:Leak
fun:malloc
...
fun:xdg_mime_init
}
{
xdg_mime_init_calloc
Memcheck:Leak
fun:calloc
...
fun:xdg_mime_init
}
# One-time allocations for default log writer lock and domains
{
should_drop_message_rw_lock
Memcheck:Leak
match-leak-kinds: reachable
fun:malloc
fun:g_rw_lock_impl_new
fun:g_rw_lock_get_impl
fun:g_rw_lock_reader_lock
fun:should_drop_message
}
{
should_drop_message_strdup
Memcheck:Leak
match-leak-kinds: reachable
fun:malloc
fun:g_malloc
fun:g_strdup
fun:g_strdup_inline
fun:should_drop_message
}
{
g_log_writer_default_set_debug_strdup
Memcheck:Leak
match-leak-kinds: reachable
fun:malloc
fun:g_malloc
fun:g_strdup_inline
fun:g_log_writer_default_set_debug_domains
}
{
g_log_writer_default_set_debug_rw_lock
Memcheck:Leak
match-leak-kinds: reachable
fun:malloc
fun:g_rw_lock_impl_new
fun:g_rw_lock_get_impl
fun:g_rw_lock_writer_lock
fun:g_log_writer_default_set_debug_domains
}
# This can be removed when versions of valgrind including the fix are widely used.
# See https://gitlab.gnome.org/GNOME/glib/-/issues/3292
{
g_utf8_collate_key wcsxfrm false-positive
Memcheck:Addr32
...
fun:wcsxfrm*
fun:g_utf8_collate_key
}
# sysprof deliberately leaks one SysprofCollector per thread
{
glib-trace-collector
Memcheck:Leak
match-leak-kinds:definite
fun:calloc
...
fun:sysprof_collector_get
...
fun:g_trace_mark
}