diff options
Diffstat (limited to 'helgrind/tests/.svn/text-base/tc10_rec_lock.c.svn-base')
-rw-r--r-- | helgrind/tests/.svn/text-base/tc10_rec_lock.c.svn-base | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/helgrind/tests/.svn/text-base/tc10_rec_lock.c.svn-base b/helgrind/tests/.svn/text-base/tc10_rec_lock.c.svn-base new file mode 100644 index 0000000..648305c --- /dev/null +++ b/helgrind/tests/.svn/text-base/tc10_rec_lock.c.svn-base @@ -0,0 +1,49 @@ + +/* Do simple things with a recursive mutex. */ + +/* Needed for older glibcs (2.3 and older, at least) who don't + otherwise "know" about pthread_rwlock_anything or about + PTHREAD_MUTEX_RECURSIVE (amongst things). */ +#define _GNU_SOURCE 1 + +#include <stdio.h> +#include <stdlib.h> +#include <assert.h> +#include <pthread.h> + +void nearly_main ( void ) +{ + pthread_mutex_t mx1; + pthread_mutexattr_t attr; + int r; + + r = pthread_mutexattr_init( &attr ); + assert(r==0); + r = pthread_mutexattr_settype( &attr, PTHREAD_MUTEX_RECURSIVE ); + assert(r==0); + r = pthread_mutex_init( &mx1, &attr ); + assert(r==0); + + fprintf(stderr, "before lock #1\n"); + r = pthread_mutex_lock( &mx1 ); assert(r == 0); + fprintf(stderr, "before lock #2\n"); + r = pthread_mutex_lock( &mx1 ); assert(r == 0); + fprintf(stderr, "before lock #3\n"); + r = pthread_mutex_lock( &mx1 ); assert(r == 0); + + fprintf(stderr, "before unlock #1\n"); + r = pthread_mutex_unlock( &mx1 ); assert(r == 0); + fprintf(stderr, "before unlock #2\n"); + r = pthread_mutex_unlock( &mx1 ); assert(r == 0); + fprintf(stderr, "before unlock #3\n"); + r = pthread_mutex_unlock( &mx1 ); assert(r == 0); + + fprintf(stderr, "before unlock #4\n"); + r = pthread_mutex_unlock( &mx1 ); /* FAILS: assert(r == 0); */ +} + +int main ( void ) +{ + nearly_main(); + return 0; +} |