mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2024-11-14 05:16:18 +01:00
e6eb4869ba
Split out the code which calculates each XDG variable value from the code which caches it, so that GLib can internally recalculate the variables if needed, without necessarily trashing the user-visible cache. This will be useful in a following commit to add support for explicitly reloading the variables. This commit necessarily reworks how g_get_user_runtime_dir() is structured, since it was inexplicably structured differently from (but equivalently to) the other XDG variable functions. Future refactoring could easily share a lot more code between these g_build_*() functions. Signed-off-by: Philip Withnall <withnall@endlessm.com> https://gitlab.gnome.org/GNOME/glib/issues/538
565 lines
8.0 KiB
Plaintext
565 lines
8.0 KiB
Plaintext
# 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
|
|
fun:calloc
|
|
...
|
|
fun:gtls_gnutls_init
|
|
}
|
|
|
|
{
|
|
gnutls-init-realloc
|
|
Memcheck:Leak
|
|
fun:realloc
|
|
...
|
|
fun:gtls_gnutls_init
|
|
}
|
|
|
|
{
|
|
g-tls-backend-gnutls-init
|
|
Memcheck:Leak
|
|
fun:g_once_impl
|
|
fun:g_tls_backend_gnutls_init
|
|
}
|
|
|
|
{
|
|
p11-tokens-init
|
|
Memcheck:Leak
|
|
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
|
|
fun:malloc
|
|
...
|
|
fun:getpwnam
|
|
fun:g_local_vfs_parse_name
|
|
}
|
|
|
|
{
|
|
glib-init-malloc
|
|
Memcheck:Leak
|
|
fun:malloc
|
|
...
|
|
fun:g_quark_init
|
|
...
|
|
fun:glib_init_ctor
|
|
}
|
|
|
|
{
|
|
glib-init-calloc
|
|
Memcheck:Leak
|
|
fun:calloc
|
|
...
|
|
fun:g_quark_init
|
|
...
|
|
fun:glib_init_ctor
|
|
}
|
|
|
|
{
|
|
gobject-init-malloc
|
|
Memcheck:Leak
|
|
fun:malloc
|
|
...
|
|
fun:gobject_init_ctor
|
|
}
|
|
|
|
{
|
|
gobject-init-realloc
|
|
Memcheck:Leak
|
|
fun:realloc
|
|
...
|
|
fun:gobject_init_ctor
|
|
}
|
|
|
|
{
|
|
gobject-init-calloc
|
|
Memcheck:Leak
|
|
fun:calloc
|
|
...
|
|
fun:gobject_init_ctor
|
|
}
|
|
|
|
{
|
|
g-type-register-dynamic
|
|
Memcheck:Leak
|
|
fun:malloc
|
|
...
|
|
fun:g_type_register_dynamic
|
|
}
|
|
|
|
{
|
|
g-type-register-static
|
|
Memcheck:Leak
|
|
fun:malloc
|
|
...
|
|
fun:g_type_register_static
|
|
}
|
|
|
|
{
|
|
g-type-register-static-realloc
|
|
Memcheck:Leak
|
|
fun:realloc
|
|
...
|
|
fun:g_type_register_static
|
|
}
|
|
|
|
{
|
|
g-type-register-static-calloc
|
|
Memcheck:Leak
|
|
fun:calloc
|
|
...
|
|
fun:g_type_register_static
|
|
}
|
|
|
|
{
|
|
g-type-add-interface-dynamic
|
|
Memcheck:Leak
|
|
fun:malloc
|
|
...
|
|
fun:g_type_add_interface_dynamic
|
|
}
|
|
|
|
{
|
|
g-type-add-interface-static
|
|
Memcheck:Leak
|
|
fun:malloc
|
|
...
|
|
fun:g_type_add_interface_static
|
|
}
|
|
|
|
{
|
|
g-test-rand-init
|
|
Memcheck:Leak
|
|
fun:calloc
|
|
...
|
|
fun:g_rand_new_with_seed_array
|
|
fun:test_run_seed
|
|
...
|
|
fun:g_test_run
|
|
}
|
|
|
|
{
|
|
g-test-rand-init2
|
|
Memcheck:Leak
|
|
fun:calloc
|
|
...
|
|
fun:g_rand_new_with_seed_array
|
|
...
|
|
fun:get_global_random
|
|
...
|
|
fun:g_test_init
|
|
}
|
|
|
|
{
|
|
g-quark-table-new
|
|
Memcheck:Leak
|
|
fun:g_hash_table_new
|
|
...
|
|
fun:quark_new
|
|
}
|
|
|
|
{
|
|
g-quark-table-resize
|
|
Memcheck:Leak
|
|
fun:g_hash_table_resize
|
|
...
|
|
fun:quark_new
|
|
}
|
|
|
|
{
|
|
g-type-interface-init
|
|
Memcheck:Leak
|
|
fun:malloc
|
|
...
|
|
fun:type_iface_vtable_base_init_Wm
|
|
}
|
|
|
|
{
|
|
g-type-class-init
|
|
Memcheck:Leak
|
|
fun:g_type_create_instance
|
|
...
|
|
fun:type_class_init_Wm
|
|
}
|
|
|
|
{
|
|
g-io-module-default-singleton-malloc
|
|
Memcheck:Leak
|
|
fun:malloc
|
|
...
|
|
fun:g_type_create_instance
|
|
...
|
|
fun:_g_io_module_get_default
|
|
}
|
|
|
|
{
|
|
g-io-module-default-singleton-module
|
|
Memcheck:Leak
|
|
fun:calloc
|
|
...
|
|
fun:g_module_open
|
|
...
|
|
fun:_g_io_module_get_default
|
|
}
|
|
|
|
{
|
|
g-get-language-names
|
|
Memcheck:Leak
|
|
fun:malloc
|
|
...
|
|
fun:g_get_language_names
|
|
}
|
|
|
|
{
|
|
g-static-mutex
|
|
Memcheck:Leak
|
|
fun:malloc
|
|
...
|
|
fun:g_static_mutex_get_mutex_impl
|
|
}
|
|
|
|
{
|
|
g-system-thread-init
|
|
Memcheck:Leak
|
|
fun:calloc
|
|
...
|
|
fun:g_system_thread_new
|
|
}
|
|
|
|
{
|
|
g-io-module-default-proxy-resolver-gnome
|
|
Memcheck:Leak
|
|
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
|
|
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_get_system_data_dirs() caches a one-time allocation
|
|
{
|
|
g_get_system_data_dirs
|
|
Memcheck:Leak
|
|
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
|
|
fun:realloc
|
|
...
|
|
fun:g_build_user_data_dir
|
|
fun:g_get_user_data_dir
|
|
} |