1 /* 2 * Copyright (c) 2010, Ngie Cooper. 3 * 4 * Test that pthread_mutex_getprioceiling() returns the current prioceiling of 5 * the mutex with PTHREAD_PRIO_PROTECT. 6 * 7 * Steps: 8 * 1. Initialize a pthread_mutexattr_t object with pthread_mutexattr_init() 9 * 2. Set the protocol using PTHREAD_PRIO_PROTECT. 10 * 3. Call pthread_mutex_getprioceiling() to obtain the prioceiling. 11 * 12 */ 13 14 #include <pthread.h> 15 #include <errno.h> 16 #include <sched.h> 17 #include <stdio.h> 18 #include <string.h> 19 #include <unistd.h> 20 #include "posixtest.h" 21 22 int main(void) 23 { 24 #if defined(_SC_PRIORITY_SCHEDULING) 25 26 if (sysconf(_SC_PRIORITY_SCHEDULING) == -1) { 27 printf("PRIORITY_SCHEDULING not supported\n"); 28 return PTS_UNSUPPORTED; 29 } 30 31 pthread_mutexattr_t mutex_attr; 32 pthread_mutex_t mutex; 33 int error, prioceiling; 34 35 error = pthread_mutexattr_init(&mutex_attr); 36 if (error) { 37 printf("pthread_mutexattr_init failed: %s\n", strerror(error)); 38 return PTS_UNRESOLVED; 39 } 40 41 /* 42 * Has to be something other than PTHREAD_PRIO_NONE, the default as per 43 * pthread_mutexattr_getprotocol. 44 */ 45 error = pthread_mutexattr_setprotocol(&mutex_attr, 46 PTHREAD_PRIO_PROTECT); 47 if (error) { 48 printf("pthread_mutexattr_setprotocol failed: %s\n", 49 strerror(error)); 50 return PTS_UNRESOLVED; 51 } 52 53 /* Initialize a mutex object */ 54 error = pthread_mutex_init(&mutex, &mutex_attr); 55 if (error) { 56 printf("pthread_mutex_init failed: %s\n", strerror(error)); 57 return PTS_UNRESOLVED; 58 } 59 60 /* Get the prioceiling of the mutex. */ 61 error = pthread_mutex_getprioceiling(&mutex, &prioceiling); 62 if (error) { 63 printf("pthread_mutex_getprioceiling failed: %s\n", 64 strerror(error)); 65 return PTS_FAIL; 66 } 67 68 (void)pthread_mutexattr_destroy(&mutex_attr); 69 (void)pthread_mutex_destroy(&mutex); 70 71 printf("Prioceiling returned: %d\n", prioceiling); 72 return PTS_PASS; 73 #else 74 printf("pthread_mutex_getprioceiling not supported"); 75 return PTS_UNSUPPORTED; 76 #endif 77 78 } 79