[glib] glib: Add installed Valgrind suppressions file for GLib and GIO
- From: Philip Withnall <pwithnall src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glib] glib: Add installed Valgrind suppressions file for GLib and GIO
- Date: Wed, 23 Nov 2016 10:46:28 +0000 (UTC)
commit a24f57b071758b01500e2b4b9c05d2a60f8280bf
Author: Philip Withnall <philip withnall collabora co uk>
Date: Sun Oct 30 20:38:57 2016 -0700
glib: Add installed Valgrind suppressions file for GLib and GIO
While we cannot get Valgrind to automatically load this suppression file
for applications which link to GLib
(https://bugs.kde.org/show_bug.cgi?id=160905), we can at least install
it on systems in a shared directory, so that developers can use a
standardised (and up-to-date) suppressions file for GLib, rather than
rolling their own.
The file will typically be installed to:
/usr/share/glib-2.0/valgrind/glib.supp
Distributors: it is recommended that this suppression file be installed
as part of the development package for GLib in your distribution.
https://bugzilla.gnome.org/show_bug.cgi?id=666114
Makefile.am | 4 +
glib.supp | 493 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 497 insertions(+), 0 deletions(-)
---
diff --git a/Makefile.am b/Makefile.am
index a1c9c33..54f22ee 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -103,6 +103,10 @@ endif
$(pkgconfig_DATA): config.status
+# Install Valgrind suppression file
+valgrinddir = $(datadir)/glib-2.0/valgrind
+dist_valgrind_DATA = glib.supp
+
# build documentation when doing distcheck
DISTCHECK_CONFIGURE_FLAGS = --enable-debug --enable-gtk-doc --enable-man --disable-maintainer-mode
diff --git a/glib.supp b/glib.supp
new file mode 100644
index 0000000..ccfab67
--- /dev/null
+++ b/glib.supp
@@ -0,0 +1,493 @@
+# 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://bugzilla.gnome.org/enter_bug.cgi?product=glib
+
+{
+ 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
+}
+
+{
+ 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:calloc
+ ...
+ 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
+}
+
+{
+ 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
+}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]