summaryrefslogtreecommitdiffstats
path: root/cpukit/rtems/src/taskinitusers.c
diff options
context:
space:
mode:
Diffstat (limited to 'cpukit/rtems/src/taskinitusers.c')
-rw-r--r--cpukit/rtems/src/taskinitusers.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/cpukit/rtems/src/taskinitusers.c b/cpukit/rtems/src/taskinitusers.c
index 51fb474a3e..490ddc73eb 100644
--- a/cpukit/rtems/src/taskinitusers.c
+++ b/cpukit/rtems/src/taskinitusers.c
@@ -48,6 +48,8 @@ void _RTEMS_tasks_Initialize_user_tasks_body( void )
rtems_id id;
rtems_status_code return_value;
rtems_initialization_tasks_table *user_tasks;
+ bool register_global_construction;
+ rtems_task_entry entry_point;
/*
* Move information into local variables
@@ -61,6 +63,8 @@ void _RTEMS_tasks_Initialize_user_tasks_body( void )
if ( !user_tasks )
return;
+ register_global_construction = true;
+
/*
* Now iterate over the initialization tasks and create/start them.
*/
@@ -76,9 +80,16 @@ void _RTEMS_tasks_Initialize_user_tasks_body( void )
if ( !rtems_is_status_successful( return_value ) )
_Terminate( INTERNAL_ERROR_RTEMS_API, true, return_value );
+ entry_point = user_tasks[ index ].entry_point;
+
+ if ( register_global_construction && entry_point != NULL ) {
+ register_global_construction = false;
+ entry_point = (rtems_task_entry) _Thread_Global_construction;
+ }
+
return_value = rtems_task_start(
id,
- user_tasks[ index ].entry_point,
+ entry_point,
user_tasks[ index ].argument
);
if ( !rtems_is_status_successful( return_value ) )