From: Bart Van Assche Date: Sat, 10 May 2008 12:52:02 +0000 (+0000) Subject: Added another POSIX reader/writer lock test. X-Git-Tag: svn/VALGRIND_3_4_0~607 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=b24f4e99f155b7eb5cd2b1ea82bbf48c25158fe2;p=thirdparty%2Fvalgrind.git Added another POSIX reader/writer lock test. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@8031 --- diff --git a/exp-drd/tests/Makefile.am b/exp-drd/tests/Makefile.am index d6949ca560..dc2de5af4f 100644 --- a/exp-drd/tests/Makefile.am +++ b/exp-drd/tests/Makefile.am @@ -73,8 +73,8 @@ EXTRA_DIST = \ pth_detached2.stderr.exp \ pth_detached2.stdout.exp \ pth_detached2.vgtest \ - pth_detached_sem.stdout.exp \ pth_detached_sem.stderr.exp \ + pth_detached_sem.stdout.exp \ pth_detached_sem.vgtest \ recursive_mutex.stderr.exp \ recursive_mutex.stdout.exp \ @@ -82,6 +82,8 @@ EXTRA_DIST = \ rwlock_race.stderr.exp \ rwlock_race.stderr.exp2 \ rwlock_race.vgtest \ + rwlock_test.stderr.exp \ + rwlock_test.vgtest \ sem_as_mutex.stderr.exp \ sem_as_mutex.vgtest \ sem_as_mutex2.stderr.exp \ @@ -144,7 +146,7 @@ EXTRA_DIST = \ tc23_bogus_condwait.vgtest \ tc24_nonzero_sem.stderr.exp \ tc24_nonzero_sem.vgtest \ - trylock.c trylock.stderr.exp + trylock.stderr.exp AM_CFLAGS = $(WERROR) -Wall -Wshadow -Wno-unused-parameter -Winline\ -g $(AM_FLAG_M3264_PRI) -DVGA_$(VG_ARCH)=1 -DVGO_$(VG_OS)=1 \ @@ -174,6 +176,7 @@ check_PROGRAMS_COMMON = \ pth_detached_sem \ recursive_mutex \ rwlock_race \ + rwlock_test \ sem_as_mutex \ sigalrm \ tc01_simple_race \ @@ -213,7 +216,7 @@ endif drd_bitmap_test_SOURCES = drd_bitmap_test.c -drd_bitmap_test_CFLAGS = $(AM_CFLAGS) -O2 -finline_limit=1000 +drd_bitmap_test_CFLAGS = $(AM_CFLAGS) -O2 --param inline-unit-growth=100000 fp_race_SOURCES = fp_race.c fp_race_LDADD = -lpthread @@ -270,6 +273,9 @@ recursive_mutex_LDADD = -lpthread rwlock_race_SOURCES = rwlock_race.c rwlock_race_LDADD = -lpthread +rwlock_test_SOURCES = rwlock_test.c +rwlock_test_LDADD = -lpthread + sem_as_mutex_SOURCES = sem_as_mutex.c sem_as_mutex_LDADD = -lpthread diff --git a/exp-drd/tests/rwlock_test.c b/exp-drd/tests/rwlock_test.c new file mode 100644 index 0000000000..c094b115a0 --- /dev/null +++ b/exp-drd/tests/rwlock_test.c @@ -0,0 +1,50 @@ +/** Multithreaded test program that triggers various access patterns without + * triggering any race conditions. + */ + + +#include +#include + + +static pthread_rwlock_t s_rwlock; +static int s_counter; + +static void* thread_func(void* arg) +{ + int i; + int sum = 0; + + for (i = 0; i < 1000; i++) + { + pthread_rwlock_rdlock(&s_rwlock); + sum += s_counter; + pthread_rwlock_unlock(&s_rwlock); + pthread_rwlock_wrlock(&s_rwlock); + s_counter++; + pthread_rwlock_unlock(&s_rwlock); + } + + return 0; +} + +int main(int argc, char** argv) +{ + const int thread_count = 10; + pthread_t tid[thread_count]; + int i; + + for (i = 0; i < thread_count; i++) + { + pthread_create(&tid[i], 0, thread_func, 0); + } + + for (i = 0; i < thread_count; i++) + { + pthread_join(tid[i], 0); + } + + fprintf(stderr, "Finished.\n"); + + return 0; +} diff --git a/exp-drd/tests/rwlock_test.stderr.exp b/exp-drd/tests/rwlock_test.stderr.exp new file mode 100644 index 0000000000..876814feec --- /dev/null +++ b/exp-drd/tests/rwlock_test.stderr.exp @@ -0,0 +1 @@ +valgrind: ./rwlock_vgtest: No such file or directory diff --git a/exp-drd/tests/rwlock_test.vgtest b/exp-drd/tests/rwlock_test.vgtest new file mode 100644 index 0000000000..bb5a6a7325 --- /dev/null +++ b/exp-drd/tests/rwlock_test.vgtest @@ -0,0 +1 @@ +prog: rwlock_vgtest