diff options
author | Thomas Pfaff <tpfaff@gmx.net> | 2003-01-09 20:51:55 +0000 |
---|---|---|
committer | Thomas Pfaff <tpfaff@gmx.net> | 2003-01-09 20:51:55 +0000 |
commit | 72fcbc3ee690a028128274d2bd0ad694961b5e5f (patch) | |
tree | 5e23945897f32019001c1f0c8e45101ae5b6ece8 /winsup/testsuite/winsup.api/pthread/mutex7e.c | |
parent | 8ccfe116d0c9ec3afb1cff7f8d41512c8f63466e (diff) | |
download | cygnal-72fcbc3ee690a028128274d2bd0ad694961b5e5f.tar.gz cygnal-72fcbc3ee690a028128274d2bd0ad694961b5e5f.tar.bz2 cygnal-72fcbc3ee690a028128274d2bd0ad694961b5e5f.zip |
Add pthread_mutex tests
Diffstat (limited to 'winsup/testsuite/winsup.api/pthread/mutex7e.c')
-rw-r--r-- | winsup/testsuite/winsup.api/pthread/mutex7e.c | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/winsup/testsuite/winsup.api/pthread/mutex7e.c b/winsup/testsuite/winsup.api/pthread/mutex7e.c new file mode 100644 index 000000000..05722512d --- /dev/null +++ b/winsup/testsuite/winsup.api/pthread/mutex7e.c @@ -0,0 +1,70 @@ +/* + * mutex7e.c + * + * Tests PTHREAD_MUTEX_ERRORCHECK mutex type. + * Thread locks and then trylocks mutex (attempted recursive lock). + * Trylock should fail with an EBUSY error. + * The second unlock attempt should fail with an EPERM error. + * + * Depends on API functions: + * pthread_create() + * pthread_join() + * pthread_mutexattr_init() + * pthread_mutexattr_destroy() + * pthread_mutexattr_settype() + * pthread_mutexattr_gettype() + * pthread_mutex_init() + * pthread_mutex_destroy() + * pthread_mutex_lock() + * pthread_mutex_unlock() + */ + +#include "test.h" + +static int lockCount = 0; + +static pthread_mutex_t mutex; +static pthread_mutexattr_t mxAttr; + +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 (void *) 555; +} + +int +main() +{ + pthread_t t; + int result = 0; + int mxType = -1; + + assert(pthread_mutexattr_init(&mxAttr) == 0); + assert(pthread_mutexattr_settype(&mxAttr, PTHREAD_MUTEX_ERRORCHECK) == 0); + assert(pthread_mutexattr_gettype(&mxAttr, &mxType) == 0); + assert(mxType == PTHREAD_MUTEX_ERRORCHECK); + + assert(pthread_mutex_init(&mutex, &mxAttr) == 0); + + assert(pthread_create(&t, NULL, locker, NULL) == 0); + + assert(pthread_join(t, (void **) &result) == 0); + assert(result == 555); + + assert(lockCount == 2); + + assert(pthread_mutex_destroy(&mutex) == 0); + assert(pthread_mutexattr_destroy(&mxAttr) == 0); + + exit(0); + + /* Never reached */ + return 0; +} + |