diff options
Diffstat (limited to 'winsup/testsuite/winsup.api/pthread/mutex7.c')
-rw-r--r-- | winsup/testsuite/winsup.api/pthread/mutex7.c | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/winsup/testsuite/winsup.api/pthread/mutex7.c b/winsup/testsuite/winsup.api/pthread/mutex7.c new file mode 100644 index 000000000..d2c9f8bee --- /dev/null +++ b/winsup/testsuite/winsup.api/pthread/mutex7.c @@ -0,0 +1,50 @@ +/* + * mutex7.c + * + * Test the default (type not set) mutex type. + * Should be the same as PTHREAD_MUTEX_ERRORCHECK. + * Thread locks then trylocks mutex (attempted recursive lock). + * The thread should lock first time and EBUSY second time. + * + * Depends on API functions: + * pthread_mutex_lock() + * pthread_mutex_trylock() + * pthread_mutex_unlock() + */ + +#include "test.h" + +static int lockCount = 0; + +static pthread_mutex_t mutex; + +void * locker(void * arg) +{ + assert(pthread_mutex_lock(&mutex) == 0); + lockCount++; + assert(pthread_mutex_trylock(&mutex) == EBUSY); + lockCount++; + assert(pthread_mutex_unlock(&mutex) == 0); + assert(pthread_mutex_unlock(&mutex) == EPERM); + + return 0; +} + +int +main() +{ + pthread_t t; + + assert(pthread_mutex_init(&mutex, NULL) == 0); + + assert(pthread_create(&t, NULL, locker, NULL) == 0); + + Sleep(1000); + + assert(lockCount == 2); + + exit(0); + + /* Never reached */ + return 0; +} |