From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:45027) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YIIQ2-0001z3-PA for qemu-devel@nongnu.org; Mon, 02 Feb 2015 09:56:07 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YIIPx-0001Hs-F9 for qemu-devel@nongnu.org; Mon, 02 Feb 2015 09:56:05 -0500 Received: from mx1.redhat.com ([209.132.183.28]:53405) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YIIPx-0001Ho-7a for qemu-devel@nongnu.org; Mon, 02 Feb 2015 09:56:01 -0500 Message-ID: <54CF8FFA.8010207@redhat.com> Date: Mon, 02 Feb 2015 15:55:54 +0100 From: Paolo Bonzini MIME-Version: 1.0 References: <1422631197-26063-1-git-send-email-pbonzini@redhat.com> In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Subject: Re: [Qemu-devel] [PULL 00/11] RCU, scsi, modules, icount changes for 2015-01-30 List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Peter Maydell Cc: QEMU Developers 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