summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilip Withnall <philip.withnall@collabora.co.uk>2014-09-25 10:33:12 +0100
committerPhilip Withnall <philip.withnall@collabora.co.uk>2014-09-25 10:33:12 +0100
commit0b0ae4d86e8b090acf909eb3e0df05e98361086c (patch)
treede7e29a7735ba1b25d70b10b619306f6400238fa
parent07a46eded142f35952a56198c4d5f2a7e8edd3a8 (diff)
downloadlibnice-0b0ae4d86e8b090acf909eb3e0df05e98361086c.tar.gz
tests: Add a Valgrind suppression file
To be used with `make check-valgrind`.
-rwxr-xr-xscripts/valgrind.sh4
-rw-r--r--tests/Makefile.am2
-rw-r--r--tests/libnice.supp475
3 files changed, 481 insertions, 0 deletions
diff --git a/scripts/valgrind.sh b/scripts/valgrind.sh
index 1e25875..2864b6f 100755
--- a/scripts/valgrind.sh
+++ b/scripts/valgrind.sh
@@ -3,10 +3,14 @@
export G_SLICE=always-malloc
export G_DEBUG=gc-friendly
+tests_dir="`dirname $0`/../tests"
+
report=`libtool --mode=execute valgrind \
--leak-check=full \
--show-reachable=no \
--error-exitcode=1 \
+ --suppressions=$tests_dir/libnice.supp \
+ --num-callers=30 \
$1 2>&1`
#if echo "$report" | grep -q ==; then
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 627f583..84c37be 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -112,3 +112,5 @@ test_icetcp_LDADD = $(COMMON_LDADD)
all-local:
chmod a+x $(srcdir)/check-test-fullmode-with-stun.sh
chmod a+x $(srcdir)/test-pseudotcp-random.sh
+
+EXTRA_DIST = libnice.supp
diff --git a/tests/libnice.supp b/tests/libnice.supp
new file mode 100644
index 0000000..0c07a57
--- /dev/null
+++ b/tests/libnice.supp
@@ -0,0 +1,475 @@
+{
+ 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
+}
+
+# TODO: haven't checked these entirely rigorously
+{
+ 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
+}
+
+# TODO: haven't checked this thoroughly either
+{
+ g-wakeup-acknowledge
+ drd:ConflictingAccess
+ fun:read
+ fun:g_wakeup_acknowledge
+}
+
+# TODO: or these
+{
+ 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
+}
+
+# TODO: ????
+{
+ 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
+}
+
+# TODO: Check this
+{
+ 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
+{
+ nice-output-stream-cond
+ Helgrind:Misc
+ ...
+ fun:g_cond_clear
+ fun:write_data_unref
+}
+
+# False positive, but I can't explain how (FIXME)
+{
+ g-task-cond
+ Helgrind:Misc
+ ...
+ fun:g_cond_clear
+ fun:g_task_finalize
+}
+
+# TODO FIXME: This is definitely a race.
+# https://bugzilla.gnome.org/show_bug.cgi?id=735754
+{
+ g-tls-base-stream-close
+ Helgrind:Race
+ ...
+ fun:g_*_stream_close
+ fun:streams_removed_cb
+}
+{
+ g-tls-base-stream-close2
+ Helgrind:Race
+ ...
+ fun:g_*_stream_close
+ fun:g_tls_connection_gnutls_close
+}
+
+# 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
+}