52 lines
		
	
	
		
			978 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			52 lines
		
	
	
		
			978 B
		
	
	
	
		
			C
		
	
	
	
	
	
| /* 
 | |
|  * mutex7d.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()
 | |
| {
 | |
|   int result = 0; 
 | |
|   pthread_t t;
 | |
| 
 | |
|   assert(pthread_mutex_init(&mutex, NULL) == 0);
 | |
| 
 | |
|   assert(pthread_create(&t, NULL, locker, NULL) == 0);
 | |
| 
 | |
|   assert(pthread_join(t, (void **) &result) == 0); 
 | |
| 
 | |
|   assert(lockCount == 2);
 | |
| 
 | |
|   exit(0);
 | |
| 
 | |
|   /* Never reached */
 | |
|   return 0;
 | |
| }
 |