mirror of
https://gitlab.rtems.org/rtems/rtos/rtems.git
synced 2026-09-25 09:07:14 +08:00
posix: Fix pthread_getschedparam()
Return the unmodified thread priority value according to POSIX. Close #2736.
This commit is contained in:
@@ -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 );
|
||||
|
||||
@@ -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, ¶m );
|
||||
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, ¶m );
|
||||
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 );
|
||||
|
||||
Reference in New Issue
Block a user