blob: a26c338f04231d70bef30a4ce47618c06daae573 [file] [log] [blame]
/*
* Copyright (c) 2010, Garrett Cooper.
*
* Test that pthread_mutex_getprioceiling() fails because:
*
* [EINVAL]
* The protocol attribute of mutex is PTHREAD_PRIO_NONE.
*
* by not specifying PTHREAD_PRIO_NONE and noting that the default (as per
* pthread_mutexattr_getprotocol) is PTHREAD_PRIO_NONE.
*
* Steps:
* 1. Initialize a mutex via pthread_mutex_init.
* 2. Do not modify the mutex.
* 3. Call pthread_mutex_getprioceiling() to obtain the prioceiling.
*
*/
#include <pthread.h>
#include <errno.h>
#include <sched.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include "posixtest.h"
int
main(void)
{
#if defined(_SC_PRIORITY_SCHEDULING)
if (sysconf(_SC_PRIORITY_SCHEDULING) == -1) {
printf("PRIORITY_SCHEDULING not supported\n");
return PTS_UNSUPPORTED;
}
pthread_mutex_t mutex;
int error, prioceiling;
/*
* The default protocol is PTHREAD_PRIO_NONE according to
* pthread_mutexattr_getprotocol.
*/
/* Initialize a mutex object */
error = pthread_mutex_init(&mutex, NULL);
if (error) {
printf("pthread_mutex_init failed: %s\n", strerror(error));
return PTS_UNRESOLVED;
}
/* Get the prioceiling of the mutex. */
error = pthread_mutex_getprioceiling(&mutex, &prioceiling);
if (error) {
if (error == EINVAL) {
printf("pthread_mutex_getprioceiling failed as "
"expected\n");
} else {
printf("pthread_mutex_getprioceiling did not fail as "
"expected: %s\n", strerror(error));
}
} else
printf("pthread_mutex_getprioceiling passed unexpectedly\n");
(void) pthread_mutex_destroy(&mutex);
return (error == EINVAL ? PTS_PASS : PTS_FAIL);
#else
printf("pthread_mutex_getprioceiling not supported");
return PTS_UNSUPPORTED;
#endif
}