diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2017-10-17 10:06:08 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2017-10-17 10:12:10 +0200 |
commit | 2fcea4c47325578d887d2c061a86e5e178d7a32a (patch) | |
tree | f779f8268a4a25365d4509ba082ab9f1204b2c2b | |
parent | score: Rename _Watchdog_Per_CPU_insert_monotonic() (diff) | |
download | rtems-2fcea4c47325578d887d2c061a86e5e178d7a32a.tar.bz2 |
posix: Fix _POSIX_Threads_Create_extension()
The thread POSIX API control must be fully initialized in
_POSIX_Threads_Create_extension(), otherwise a pthread_setschedparam()
is broken for all threads not created with pthread_create().
-rw-r--r-- | cpukit/posix/src/pthread.c | 1 | ||||
-rw-r--r-- | cpukit/posix/src/pthreadcreate.c | 3 | ||||
-rw-r--r-- | testsuites/psxtests/psxclassic01/init.c | 8 |
3 files changed, 10 insertions, 2 deletions
diff --git a/cpukit/posix/src/pthread.c b/cpukit/posix/src/pthread.c index 30b830cd85..9d1c1ad012 100644 --- a/cpukit/posix/src/pthread.c +++ b/cpukit/posix/src/pthread.c @@ -151,6 +151,7 @@ static bool _POSIX_Threads_Create_extension( _Watchdog_Preinitialize( &api->Sporadic.Timer, _Per_CPU_Get_by_index( 0 ) ); _Watchdog_Initialize( &api->Sporadic.Timer, _POSIX_Threads_Sporadic_timer ); + _Priority_Node_set_inactive( &api->Sporadic.Low_priority ); return true; } diff --git a/cpukit/posix/src/pthreadcreate.c b/cpukit/posix/src/pthreadcreate.c index 75205f7e0a..d8cafe52ce 100644 --- a/cpukit/posix/src/pthreadcreate.c +++ b/cpukit/posix/src/pthreadcreate.c @@ -242,8 +242,7 @@ int pthread_create( ( the_attr->inheritsched == PTHREAD_EXPLICIT_SCHED ); api->schedpolicy = the_attr->schedpolicy; api->schedparam = the_attr->schedparam; - _Priority_Node_initialize( &api->Sporadic.Low_priority, core_low_prio ); - _Priority_Node_set_inactive( &api->Sporadic.Low_priority ); + _Priority_Node_set_priority( &api->Sporadic.Low_priority, core_low_prio ); if ( schedpolicy == SCHED_SPORADIC ) { _POSIX_Threads_Sporadic_timer( &api->Sporadic.Timer ); diff --git a/testsuites/psxtests/psxclassic01/init.c b/testsuites/psxtests/psxclassic01/init.c index 924224c7b7..1acc14142a 100644 --- a/testsuites/psxtests/psxclassic01/init.c +++ b/testsuites/psxtests/psxclassic01/init.c @@ -52,9 +52,17 @@ rtems_task test_task(rtems_task_argument arg) int sc; struct sigaction new_action; sigset_t mask; + int policy; + struct sched_param param; printf("test_task starting...\n"); + sc = pthread_getschedparam( pthread_self(), &policy, ¶m ); + rtems_test_assert( sc == 0 ); + + sc = pthread_setschedparam( pthread_self(), policy, ¶m ); + rtems_test_assert( sc == 0 ); + sc = sigemptyset (&new_action.sa_mask); rtems_test_assert( sc == 0 ); |