Commit 0b0ae4d8 authored by Philip Withnall's avatar Philip Withnall

tests: Add a Valgrind suppression file

To be used with `make check-valgrind`.
parent 07a46ede
......@@ -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
......
......@@ -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
{
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
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment