diff options
author | rpj <rpj> | 2001-05-31 02:05:25 +0000 |
---|---|---|
committer | rpj <rpj> | 2001-05-31 02:05:25 +0000 |
commit | a8744086b476e4007c1d8fc0fae84ecfcade99ba (patch) | |
tree | 69bd3bd925233e00d960f3de5a5f3953db235da7 /tests/mutex6.c | |
parent | e121b938c9f012958196a3141f04a3fd4f58bdb9 (diff) |
New test.
Diffstat (limited to 'tests/mutex6.c')
-rw-r--r-- | tests/mutex6.c | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/tests/mutex6.c b/tests/mutex6.c new file mode 100644 index 0000000..39b95e5 --- /dev/null +++ b/tests/mutex6.c @@ -0,0 +1,51 @@ +/* + * mutex6.c + * + * Test the default (type not set) mutex type. + * Should be the same as PTHREAD_MUTEX_NORMAL. + * Thread locks mutex twice (recursive lock). + * Locking thread should deadlock on second attempt. + * + * 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_lock(&mutex) != 0); + lockCount++; + Sleep(1000); + assert(pthread_mutex_unlock(&mutex) == 0); + assert(pthread_mutex_unlock(&mutex) == 0); + + return 0; +} + +int +main() +{ + pthread_t t; + + assert(pthread_mutex_init(&mutex, NULL) == 0); + + assert(pthread_create(&t, NULL, locker, NULL) == 0); + + Sleep(2000); + + assert(lockCount == 1); + + exit(0); + + /* Never reached */ + return 0; +} |