1 2 /* Needed for older glibcs (2.3 and older, at least) who don't 3 otherwise "know" about pthread_rwlock_anything or about 4 PTHREAD_MUTEX_RECURSIVE (amongst things). */ 5 #define _GNU_SOURCE 1 6 7 #include <stdio.h> 8 #include "safe-pthread.h" 9 #include <assert.h> 10 11 /* Do trivial stuff with a reader-writer lock. */ 12 13 int main ( void ) 14 { 15 int r; 16 pthread_rwlock_t rwl; 17 18 r = pthread_rwlock_init( &rwl, NULL ); assert(r == 0); 19 20 r = pthread_rwlock_wrlock( &rwl ); assert(r == 0); 21 r = pthread_rwlock_unlock( &rwl ); assert(r == 0); 22 23 r = pthread_rwlock_rdlock( &rwl ); assert(r == 0); 24 r = pthread_rwlock_rdlock( &rwl ); assert(r == 0); 25 r = pthread_rwlock_unlock( &rwl ); assert(r == 0); 26 r = pthread_rwlock_unlock( &rwl ); assert(r == 0); 27 28 /* this should fail - lock is unowned now */ 29 r = pthread_rwlock_unlock( &rwl ); 30 #if defined(VGO_darwin) || defined(VGO_solaris) 31 assert(r != 0); 32 #else 33 assert(r == 0); 34 #endif 35 36 r = pthread_rwlock_destroy( &rwl ); assert(r == 0); 37 38 return 0; 39 } 40