summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2017-10-17 11:46:54 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2017-10-17 12:10:31 +0200
commit37eb717f90c04b9a2654ef5c5b247eb50652e54b (patch)
treea7b40d593bbccdf1e880faa2cd9f6bdafdf1747f
parentposix: Remove POSIX_API_Control::schedparam (diff)
downloadrtems-37eb717f90c04b9a2654ef5c5b247eb50652e54b.tar.bz2
posix: Simplify _POSIX_Threads_Create_extension()
Move unblocked signals initialization to pthread_create(). Update #2514.
-rw-r--r--cpukit/posix/src/pthread.c17
-rw-r--r--cpukit/posix/src/pthreadcreate.c4
2 files changed, 4 insertions, 17 deletions
diff --git a/cpukit/posix/src/pthread.c b/cpukit/posix/src/pthread.c
index 8bd44ca03a..ba394b4924 100644
--- a/cpukit/posix/src/pthread.c
+++ b/cpukit/posix/src/pthread.c
@@ -122,26 +122,9 @@ static bool _POSIX_Threads_Create_extension(
)
{
POSIX_API_Control *api;
- POSIX_API_Control *executing_api;
api = created->API_Extensions[ THREAD_API_POSIX ];
- /*
- * If the thread is not a posix thread, then all posix signals are blocked
- * by default.
- *
- * The check for class == 1 is debug. Should never really happen.
- */
- RTEMS_STATIC_ASSERT( SIGNAL_EMPTY_MASK == 0, signals_pending );
- if ( _Objects_Get_API( created->Object.id ) == OBJECTS_POSIX_API
- #if defined(RTEMS_DEBUG)
- && _Objects_Get_class( created->Object.id ) == 1
- #endif
- ) {
- executing_api = _Thread_Get_executing()->API_Extensions[ THREAD_API_POSIX ];
- api->signals_unblocked = executing_api->signals_unblocked;
- }
-
api->Sporadic.thread = created;
_Watchdog_Preinitialize( &api->Sporadic.Timer, _Per_CPU_Get_by_index( 0 ) );
_Watchdog_Initialize( &api->Sporadic.Timer, _POSIX_Threads_Sporadic_timer );
diff --git a/cpukit/posix/src/pthreadcreate.c b/cpukit/posix/src/pthreadcreate.c
index 0de566f7c2..2315b7f5ee 100644
--- a/cpukit/posix/src/pthreadcreate.c
+++ b/cpukit/posix/src/pthreadcreate.c
@@ -74,6 +74,7 @@ int pthread_create(
Thread_Control *executing;
const Scheduler_Control *scheduler;
POSIX_API_Control *api;
+ const POSIX_API_Control *executing_api;
int schedpolicy = SCHED_RR;
struct sched_param schedparam;
Objects_Name name;
@@ -237,6 +238,9 @@ int pthread_create(
* finish initializing the per API structure
*/
api = the_thread->API_Extensions[ THREAD_API_POSIX ];
+ executing_api = executing->API_Extensions[ THREAD_API_POSIX ];
+
+ api->signals_unblocked = executing_api->signals_unblocked;
api->created_with_explicit_scheduler =
( the_attr->inheritsched == PTHREAD_EXPLICIT_SCHED );