From: Bart Van Assche Date: Fri, 10 Jul 2009 09:26:29 +0000 (+0000) Subject: Modified recursive_mutex regression test: improved portability by removing usage... X-Git-Tag: svn/VALGRIND_3_5_0~422 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=a0becefe295d5a3f1faa70facf1267ade8369c13;p=thirdparty%2Fvalgrind.git Modified recursive_mutex regression test: improved portability by removing usage of alarm() / all output is now sent to stderr / full output is now compared instead of only a summary. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@10425 --- diff --git a/drd/tests/recursive_mutex.c b/drd/tests/recursive_mutex.c index 3ddfc25380..7d8ff2d371 100644 --- a/drd/tests/recursive_mutex.c +++ b/drd/tests/recursive_mutex.c @@ -10,26 +10,25 @@ #include "../../config.h" -#if !defined(VGO_darwin) static void lock_twice(pthread_mutex_t* const p) { - pthread_mutex_lock(p); - pthread_mutex_lock(p); - pthread_mutex_unlock(p); - pthread_mutex_unlock(p); + if (pthread_mutex_trylock(p) != 0) + fprintf(stderr, "first lock call failed !\n"); + if (pthread_mutex_trylock(p) != 0) + fprintf(stderr, "second lock call failed !\n"); + if (pthread_mutex_unlock(p) != 0) + fprintf(stderr, "first unlock call failed !\n"); + if (pthread_mutex_unlock(p) != 0) + fprintf(stderr, "second unlock call failed !\n"); } -#endif int main(int argc, char** argv) { - /* Let the program abort after 3 seconds instead of leaving it deadlocked. */ - alarm(3); - #if defined(HAVE_PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP) { pthread_mutex_t m = PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP; - printf("Recursive mutex (statically initialized).\n"); + fprintf(stderr, "Recursive mutex (statically initialized).\n"); lock_twice(&m); pthread_mutex_destroy(&m); } @@ -39,7 +38,7 @@ int main(int argc, char** argv) pthread_mutex_t m; pthread_mutexattr_t attr; - printf("Recursive mutex (initialized via mutex attributes).\n"); + fprintf(stderr, "\nRecursive mutex (initialized via mutex attributes).\n"); pthread_mutexattr_init(&attr); pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE_NP); pthread_mutex_init(&m, &attr); @@ -53,7 +52,7 @@ int main(int argc, char** argv) pthread_mutex_t m; pthread_mutexattr_t attr; - printf("Error checking mutex.\n"); + fprintf(stderr, "\nError checking mutex.\n"); pthread_mutexattr_init(&attr); pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_ERRORCHECK_NP); pthread_mutex_init(&m, &attr); @@ -63,17 +62,14 @@ int main(int argc, char** argv) } #endif -// DDD: Darwin doesn't support signals yet, so the alarm() call doesn't kick -// in, which causes it to hang. -#if !defined(VGO_darwin) { pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER; - printf("Non-recursive mutex.\n"); - fflush(stdout); + fprintf(stderr, "\nNon-recursive mutex.\n"); lock_twice(&m); } - printf("Done.\n"); -#endif + + fprintf(stderr, "\nDone.\n"); + return 0; } diff --git a/drd/tests/recursive_mutex.stderr.exp b/drd/tests/recursive_mutex.stderr.exp index 4cbed89c1a..bdd5089333 100644 --- a/drd/tests/recursive_mutex.stderr.exp +++ b/drd/tests/recursive_mutex.stderr.exp @@ -1 +1,31 @@ -ERROR SUMMARY: 4 errors from 4 contexts + +Recursive mutex (statically initialized). + +Recursive mutex (initialized via mutex attributes). + +Error checking mutex. +second lock call failed ! +Mutex not locked by calling thread: mutex 0x........, recursion count 0, owner 1. + at 0x........: pthread_mutex_unlock (drd_pthread_intercepts.c:?) + by 0x........: lock_twice (recursive_mutex.c:?) + by 0x........: main (recursive_mutex.c:?) +mutex 0x........ was first observed at: + at 0x........: pthread_mutex_init (drd_pthread_intercepts.c:?) + by 0x........: main (recursive_mutex.c:?) +second unlock call failed ! + +Non-recursive mutex. +second lock call failed ! + +Mutex not locked by calling thread: mutex 0x........, recursion count 0, owner 1. + at 0x........: pthread_mutex_unlock (drd_pthread_intercepts.c:?) + by 0x........: lock_twice (recursive_mutex.c:?) + by 0x........: main (recursive_mutex.c:?) +mutex 0x........ was first observed at: + at 0x........: pthread_mutex_trylock (drd_pthread_intercepts.c:?) + by 0x........: lock_twice (recursive_mutex.c:?) + by 0x........: main (recursive_mutex.c:?) + +Done. + +ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 0 from 0) diff --git a/drd/tests/recursive_mutex.stdout.exp b/drd/tests/recursive_mutex.stdout.exp deleted file mode 100644 index 41dca6e038..0000000000 --- a/drd/tests/recursive_mutex.stdout.exp +++ /dev/null @@ -1,4 +0,0 @@ -Recursive mutex (statically initialized). -Recursive mutex (initialized via mutex attributes). -Error checking mutex. -Non-recursive mutex. diff --git a/drd/tests/recursive_mutex.vgtest b/drd/tests/recursive_mutex.vgtest index dcb89376da..23961ab060 100644 --- a/drd/tests/recursive_mutex.vgtest +++ b/drd/tests/recursive_mutex.vgtest @@ -1,4 +1,4 @@ prereq: ./supported_libpthread -vgopts: --check-stack-var=yes +vgopts: --check-stack-var=yes --var-info=yes prog: recursive_mutex -stderr_filter: filter_error_summary +stderr_filter: filter_stderr_and_thread_no