From a5df8fc8f5f22ba561a39b3eb752766cb62d7f71 Mon Sep 17 00:00:00 2001 From: Andreas Schneider Date: Fri, 28 Sep 2018 11:01:15 +0200 Subject: cmake: Suppress helgrind race condition warning we created on purpose Signed-off-by: Andreas Schneider Reviewed-by: Ralph Boehme --- src/socket_wrapper.c | 6 ++++++ tests/CMakeLists.txt | 2 +- tests/helgrind.supp | 11 +++++++++++ 3 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 tests/helgrind.supp diff --git a/src/socket_wrapper.c b/src/socket_wrapper.c index 36482c6..7a27b40 100644 --- a/src/socket_wrapper.c +++ b/src/socket_wrapper.c @@ -659,6 +659,12 @@ static void swrap_mutex_unlock(pthread_mutex_t *mutex) } } +/* + * These macros have a thread race condition on purpose! + * + * This is an optimization to avoid locking each time we check if the symbol is + * bound. + */ #define swrap_bind_symbol_libc(sym_name) \ if (swrap.libc.symbols._libc_##sym_name.obj == NULL) { \ swrap_mutex_lock(&libc_symbol_binding_mutex); \ diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 068af00..6884473 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -73,7 +73,7 @@ endforeach() if (HELGRIND_TESTING) find_program(VALGRIND_EXECUTABLE valgrind) if (VALGRIND_EXECUTABLE) - set(VALGRIND_HELGRIND_OPTIONS -v --trace-children=yes --tool=helgrind --error-exitcode=1 --read-var-info=yes) + set(VALGRIND_HELGRIND_OPTIONS -v --trace-children=yes --tool=helgrind --error-exitcode=1 --read-var-info=yes --suppressions=${CMAKE_CURRENT_SOURCE_DIR}/helgrind.supp) foreach(_TEST ${SWRAP_THREADED_TESTS}) set(_HELGRIND_TEST "helgrind_${_TEST}") diff --git a/tests/helgrind.supp b/tests/helgrind.supp new file mode 100644 index 0000000..733f714 --- /dev/null +++ b/tests/helgrind.supp @@ -0,0 +1,11 @@ +# The swrap_bind_symbol_lib* macros have a thread race condition on purpose! +# +# As an optimization we do not lock the access. However if the obj is not +# bound, we lock it with a mutex and reread it again. And binding the symbol is +# protected. +{ + SWRAP_SYMBOL_ACCESS + Helgrind:Race + fun:libc_* + fun:swrap_* +} -- cgit