On 02/02/2015 15:36, Peter Maydell wrote:
> (Strictly speaking "local" isn't POSIX sh, but dash seems to cope
> with it, which is the major non-POSIX shell, and we have a couple
> of instances in configure already. Still, why do we need these
> variables to be local?)

Just for cleanliness; they aren't supposed to be used outside the function.

> Also some clang warnings:
>   CC    tests/rcutorture.o
> /Users/pm215/src/qemu/tests/rcutorture.c:260:13: warning: variable 'garbage' 
> is
>       uninitialized when used here [-Wuninitialized]
>             garbage++;
>             ^~~~~~~
> /Users/pm215/src/qemu/tests/rcutorture.c:244:25: note: initialize the variable
>       'garbage' to silence this warning
>     volatile int garbage;
>                         ^
>                          = 0
> 1 warning generated.

Fixed.

> And the rcutorture test seems to hang on OSX, or at least take way
> longer than anything we put in 'make check' ought to take.

It should only take 2-3 seconds.

Can you try this:

diff --git a/tests/rcutorture.c b/tests/rcutorture.c
index e94caf2..b17b4a6 100644
--- a/tests/rcutorture.c
+++ b/tests/rcutorture.c
@@ -168,7 +168,7 @@ static void perftestrun(int nthreads, int duration,
int nreaders, int nupdaters)
         g_usleep(1000);
     }
     goflag = GOFLAG_RUN;
-    sleep(duration);
+    g_usleep(duration * G_USEC_PER_SEC);
     goflag = GOFLAG_STOP;
     wait_all_threads();
     printf("n_reads: %lld  n_updates: %ld  nreaders: %d  nupdaters: %d
duration: %d\n",
@@ -344,7 +344,7 @@ static void stresstest(int nreaders, int duration)
         create_thread(rcu_fake_update_stress_test);
     }
     goflag = GOFLAG_RUN;
-    sleep(duration);
+    g_usleep(duration * G_USEC_PER_SEC);
     goflag = GOFLAG_STOP;
     wait_all_threads();
     printf("n_reads: %lld  n_updates: %ld  n_mberror: %d\n",
@@ -374,7 +374,7 @@ static void gtest_stress(int nreaders, int duration)
         create_thread(rcu_fake_update_stress_test);
     }
     goflag = GOFLAG_RUN;
-    sleep(duration);
+    g_usleep(duration * G_USEC_PER_SEC);
     goflag = GOFLAG_STOP;
     wait_all_threads();
     g_assert_cmpint(n_mberror, ==, 0);

(though I doubt it matters: tests/fdc-test uses sleep(3) already)
and if it still fails, catch a backtrace of all threads?

Thanks,

Paolo

Reply via email to