glib/glib.supp
Philip Withnall c4cedf60f8 glib.supp: Allow definite leaks of g_main_context_push_thread_default()
If a transient worker thread calls it, the allocated memory is
definitely leaked when the thread exits. That’s intentional.

Signed-off-by: Philip Withnall <withnall@endlessm.com>
2019-11-12 15:32:05 +00:00

949 lines
15 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.

# 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
...
fun:glib_init_ctor
}
{
glib-init-calloc
Memcheck:Leak
match-leak-kinds:reachable
fun:calloc
...
fun:g_quark_init
...
fun:glib_init_ctor
}
{
gobject-init-malloc
Memcheck:Leak
match-leak-kinds:reachable
fun:malloc
...
fun:gobject_init_ctor
}
{
gobject-init-realloc
Memcheck:Leak
match-leak-kinds:reachable
fun:realloc
...
fun:gobject_init_ctor
}
{
gobject-init-calloc
Memcheck:Leak
match-leak-kinds:possible,reachable
fun:calloc
...
fun:gobject_init_ctor
}
{
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: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: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-test-rand-init2
Memcheck:Leak
match-leak-kinds:reachable
fun:calloc
...
fun:g_rand_new_with_seed_array
...
fun:get_global_random
...
fun:g_test_init
}
{
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-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
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-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-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-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
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/master/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
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
fun:malloc
...
fun:set_strv_if_different
fun:g_set_user_dirs
}
# g_get_system_data_dirs() caches a one-time allocation
{
g_get_system_data_dirs
Memcheck:Leak
match-leak-kinds: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:reachable
fun:realloc
...
fun:g_build_user_data_dir
fun:g_get_user_data_dir
}
# 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
}
# 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
}
# 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
}
# 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_*
}