summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2016-06-13 06:53:27 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2016-06-13 14:56:21 +0200
commit23b1bb38b208a6638747bb49b8184a5571e8f5e7 (patch)
tree3f68df22a0cb4c056d31fc910763ef59ca0afedb
parentbsp/qoriq: Increase reserved size for FDT (diff)
downloadrtems-23b1bb38b208a6638747bb49b8184a5571e8f5e7.tar.bz2
posix: Fix pthread_getschedparam()
Return the unmodified thread priority value according to POSIX. Close #2736.
-rw-r--r--cpukit/posix/src/pthreadgetschedparam.c2
-rw-r--r--testsuites/psxtests/psx05/init.c46
2 files changed, 47 insertions, 1 deletions
diff --git a/cpukit/posix/src/pthreadgetschedparam.c b/cpukit/posix/src/pthreadgetschedparam.c
index 21908cb2e3..9b6969ce8e 100644
--- a/cpukit/posix/src/pthreadgetschedparam.c
+++ b/cpukit/posix/src/pthreadgetschedparam.c
@@ -54,7 +54,7 @@ int pthread_getschedparam(
*policy = api->schedpolicy;
*param = api->schedparam;
param->sched_priority = _POSIX_Priority_From_core(
- the_thread->current_priority
+ the_thread->real_priority
);
_Thread_State_release( the_thread, &lock_context );
diff --git a/testsuites/psxtests/psx05/init.c b/testsuites/psxtests/psx05/init.c
index 51d2cc20ef..d3311fcba5 100644
--- a/testsuites/psxtests/psx05/init.c
+++ b/testsuites/psxtests/psx05/init.c
@@ -112,6 +112,50 @@ void calculate_abstimeout(
}
+static void test_get_priority( void )
+{
+ int status;
+ pthread_mutexattr_t attr;
+ pthread_mutex_t mutex;
+ int policy;
+ struct sched_param param;
+ int real_priority;
+
+ status = pthread_getschedparam( pthread_self(), &policy, &param );
+ rtems_test_assert( status == 0 );
+
+ real_priority = param.sched_priority;
+
+ status = pthread_mutexattr_init( &attr );
+ rtems_test_assert( status == 0 );
+
+ status = pthread_mutexattr_setprotocol( &attr, PTHREAD_PRIO_PROTECT );
+ rtems_test_assert( !status );
+
+ status = pthread_mutexattr_setprioceiling( &attr, real_priority + 1 );
+ rtems_test_assert( status == 0 );
+
+ status = pthread_mutex_init( &mutex, &attr );
+ rtems_test_assert( status == 0 );
+
+ status = pthread_mutexattr_destroy( &attr );
+ rtems_test_assert( status == 0 );
+
+ status = pthread_mutex_lock( &mutex );
+ rtems_test_assert( status == 0 );
+
+ status = pthread_getschedparam( pthread_self(), &policy, &param );
+ rtems_test_assert( status == 0 );
+
+ rtems_test_assert( real_priority == param.sched_priority );
+
+ status = pthread_mutex_unlock( &mutex );
+ rtems_test_assert( status == 0 );
+
+ status = pthread_mutex_destroy( &mutex );
+ rtems_test_assert( status == 0 );
+}
+
void *POSIX_Init(
void *argument
)
@@ -133,6 +177,8 @@ void *POSIX_Init(
TEST_BEGIN();
+ test_get_priority();
+
/* set the time of day, and print our buffer in multiple ways */
set_time( TM_FRIDAY, TM_MAY, 24, 96, 11, 5, 0 );