From: Bart Van Assche Date: Wed, 27 Jul 2011 08:49:12 +0000 (+0000) Subject: More thread tool regression test scheduler sensitivity fixes X-Git-Tag: svn/VALGRIND_3_7_0~314 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f7c4be8a6a31c6497259c1ede3c22f7421f80cca;p=thirdparty%2Fvalgrind.git More thread tool regression test scheduler sensitivity fixes git-svn-id: svn://svn.valgrind.org/valgrind/trunk@11923 --- diff --git a/drd/tests/annotate_smart_pointer.cpp b/drd/tests/annotate_smart_pointer.cpp index cf6e6ac73e..af085b5366 100755 --- a/drd/tests/annotate_smart_pointer.cpp +++ b/drd/tests/annotate_smart_pointer.cpp @@ -305,6 +305,7 @@ static void* thread_func(void* arg) int main(int argc, char** argv) { + struct timespec delay = { 0, 100 * 1000 * 1000 }; const int nthreads = std::max(argc > 1 ? atoi(argv[1]) : 1, 1); const int iterations = std::max(argc > 2 ? atoi(argv[2]) : 1, 1); s_enable_annotations = argc > 3 ? !!atoi(argv[3]) : true; @@ -318,6 +319,7 @@ int main(int argc, char** argv) for (int i = 0; i < nthreads; ++i) T[i].Create(thread_func, new smart_ptr(p)); p = NULL; + nanosleep(&delay, 0); for (int i = 0; i < nthreads; ++i) T[i].Join(); } diff --git a/drd/tests/atomic_var.c b/drd/tests/atomic_var.c index 78902d5598..4bedebd99a 100644 --- a/drd/tests/atomic_var.c +++ b/drd/tests/atomic_var.c @@ -36,9 +36,6 @@ static int s_y = 0; static void* thread_func_1(void* arg) { - struct timespec delay = { 0, 100 * 1000 * 1000 }; - - nanosleep(&delay, 0); s_y = 1; (void) sync_add_and_fetch(&s_x, 1); return 0; @@ -56,11 +53,13 @@ int main(int argc, char** argv) { int i; const int n_threads = 2; + const struct timespec delay = { 0, 100 * 1000 * 1000 }; pthread_t tid[n_threads]; fprintf(stderr, "Start of test.\n"); pthread_create(&tid[0], 0, thread_func_1, 0); pthread_create(&tid[1], 0, thread_func_2, 0); + nanosleep(&delay, 0); for (i = 0; i < n_threads; i++) pthread_join(tid[i], 0); fprintf(stderr, "Test finished.\n"); diff --git a/drd/tests/pth_barrier.c b/drd/tests/pth_barrier.c index e0b40a7a13..98fc5474ee 100644 --- a/drd/tests/pth_barrier.c +++ b/drd/tests/pth_barrier.c @@ -64,6 +64,7 @@ static void* threadfunc(struct threadinfo* p) static void barriers_and_races(const int nthread, const int iterations) { int i; + const struct timespec delay = { 0, 100 * 1000 * 1000 }; struct threadinfo* t; pthread_barrier_t b; int* array; @@ -84,6 +85,8 @@ static void barriers_and_races(const int nthread, const int iterations) pthread_create(&t[i].tid, 0, (void*(*)(void*))threadfunc, &t[i]); } + nanosleep(&delay, 0); + for (i = 0; i < nthread; i++) { pthread_join(t[i].tid, 0); diff --git a/helgrind/tests/hg04_race.c b/helgrind/tests/hg04_race.c index 111195bf90..3b23f8f9b7 100644 --- a/helgrind/tests/hg04_race.c +++ b/helgrind/tests/hg04_race.c @@ -14,12 +14,15 @@ static void *th(void *v) int main() { + const struct timespec delay = { 0, 100 * 1000 * 1000 }; pthread_t a, b; pthread_create(&a, NULL, th, NULL); - sleep(1); /* force ordering */ + nanosleep(&delay, 0); /* force ordering */ pthread_create(&b, NULL, th, NULL); + nanosleep(&delay, 0); /* avoid false ordering between threads */ + pthread_join(a, NULL); pthread_join(b, NULL); diff --git a/helgrind/tests/tc08_hbl2.c b/helgrind/tests/tc08_hbl2.c index ed6fdb9ac2..ae0083e41e 100644 --- a/helgrind/tests/tc08_hbl2.c +++ b/helgrind/tests/tc08_hbl2.c @@ -121,7 +121,7 @@ void* child_fn ( void* arg ) int main ( void ) { - struct timespec delay = { 0, 100 * 1000 * 1000 }; + const struct timespec delay = { 0, 100 * 1000 * 1000 }; pthread_t child; int i; @@ -130,13 +130,13 @@ int main ( void ) exit(1); } - nanosleep(&delay, 0); - for (i = 0; i < LIMIT; i++) { INC(x, "main"); if (i == 5) sleep(1); /* make sure child doesn't starve */ } + nanosleep(&delay, 0); + if (pthread_join(child, NULL)) { perror("pthread join"); exit(1);