From 4ce8144dee9e1b9c8e3f595e64fb6f771ba5f0db Mon Sep 17 00:00:00 2001 From: Bart Van Assche Date: Tue, 18 Mar 2014 08:45:51 +0000 Subject: [PATCH] drd/tests/atomic_var: Avoid that platform-specific code can trigger a false negative git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13876 --- drd/tests/atomic_var.c | 6 ++++++ drd/tests/atomic_var.stderr.exp | 2 +- drd/tests/atomic_var.vgtest | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/drd/tests/atomic_var.c b/drd/tests/atomic_var.c index 40f15669e..113a3a50b 100644 --- a/drd/tests/atomic_var.c +++ b/drd/tests/atomic_var.c @@ -23,6 +23,8 @@ has built-in functions for atomic memory access. #endif +static pthread_barrier_t s_barrier; + static __inline__ int sync_add_and_fetch(int* p, int i) { @@ -36,6 +38,7 @@ static int s_y = 0; static void* thread_func_1(void* arg) { + pthread_barrier_wait(&s_barrier); s_y = 1; (void) sync_add_and_fetch(&s_x, 1); return 0; @@ -43,6 +46,7 @@ static void* thread_func_1(void* arg) static void* thread_func_2(void* arg) { + pthread_barrier_wait(&s_barrier); while (sync_add_and_fetch(&s_x, 0) == 0) ; fprintf(stderr, "y = %d\n", s_y); @@ -56,10 +60,12 @@ int main(int argc, char** argv) pthread_t tid[n_threads]; fprintf(stderr, "Start of test.\n"); + pthread_barrier_init(&s_barrier, 0, 2); pthread_create(&tid[0], 0, thread_func_1, 0); pthread_create(&tid[1], 0, thread_func_2, 0); for (i = 0; i < n_threads; i++) pthread_join(tid[i], 0); + pthread_barrier_destroy(&s_barrier); fprintf(stderr, "Test finished.\n"); return 0; diff --git a/drd/tests/atomic_var.stderr.exp b/drd/tests/atomic_var.stderr.exp index ad05687d0..c974d67ae 100644 --- a/drd/tests/atomic_var.stderr.exp +++ b/drd/tests/atomic_var.stderr.exp @@ -4,7 +4,7 @@ Conflicting load by thread x at 0x........ size 4 at 0x........: thread_func_2 (atomic_var.c:?) by 0x........: vgDrd_thread_wrapper (drd_pthread_intercepts.c:?) Location 0x........ is 0 bytes inside global var "s_y" -declared at atomic_var.c:35 +declared at atomic_var.c:37 y = 1 Test finished. diff --git a/drd/tests/atomic_var.vgtest b/drd/tests/atomic_var.vgtest index e764355f9..dc7415628 100644 --- a/drd/tests/atomic_var.vgtest +++ b/drd/tests/atomic_var.vgtest @@ -1,4 +1,4 @@ prereq: test -e atomic_var && ./supported_libpthread -vgopts: --read-var-info=yes --check-stack-var=yes --show-confl-seg=no --num-callers=2 +vgopts: --fair-sched=yes --read-var-info=yes --check-stack-var=yes --show-confl-seg=no --num-callers=2 prog: atomic_var stderr_filter: filter_stderr_and_thread_no