]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
More thread tool regression test scheduler sensitivity fixes
authorBart Van Assche <bvanassche@acm.org>
Wed, 27 Jul 2011 08:49:12 +0000 (08:49 +0000)
committerBart Van Assche <bvanassche@acm.org>
Wed, 27 Jul 2011 08:49:12 +0000 (08:49 +0000)
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@11923

drd/tests/annotate_smart_pointer.cpp
drd/tests/atomic_var.c
drd/tests/pth_barrier.c
helgrind/tests/hg04_race.c
helgrind/tests/tc08_hbl2.c

index cf6e6ac73e7041147c7f84394c65ee9ab81b591a..af085b536633a06a4511431c42781b8d7322f3e0 100755 (executable)
@@ -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<counter>(p));
     p = NULL;
+    nanosleep(&delay, 0);
     for (int i = 0; i < nthreads; ++i)
       T[i].Join();
   }
index 78902d5598ad7a3f71ce295c569324868aa227db..4bedebd99abac205e7681db0bdeada312a0a47b9 100644 (file)
@@ -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");
index e0b40a7a134bc1613f2fe2d6aa9358ba6d863bad..98fc5474ee161d1a8bf5ec2156db6aef9ccff39d 100644 (file)
@@ -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);
index 111195bf903f8d6ba91194bfc8be60d7b12215e7..3b23f8f9b7d620376b82c8d205974508e7f3a647 100644 (file)
@@ -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);
 
index ed6fdb9ac2da7eff0a389fe0f89bbb1577ae4e53..ae0083e41e99d843752eecdfe6cdfd6d059c9783 100644 (file)
@@ -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);