summaryrefslogtreecommitdiffstats
path: root/cpukit/score/src/threadhandler.c
diff options
context:
space:
mode:
Diffstat (limited to 'cpukit/score/src/threadhandler.c')
-rw-r--r--cpukit/score/src/threadhandler.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/cpukit/score/src/threadhandler.c b/cpukit/score/src/threadhandler.c
index cfdb9292d1..d3755f4466 100644
--- a/cpukit/score/src/threadhandler.c
+++ b/cpukit/score/src/threadhandler.c
@@ -58,6 +58,10 @@ void _Thread_Handler( void )
{
ISR_Level level;
Thread_Control *executing;
+#ifdef USE_INIT_FINI
+ static char doneConstructors;
+ char doneCons;
+#endif
executing = _Thread_Executing;
@@ -69,6 +73,11 @@ void _Thread_Handler( void )
level = executing->Start.isr_level;
_ISR_Set_level(level);
+#ifdef USE_INIT_FINI
+ doneCons = doneConstructors;
+ doneConstructors = 1;
+#endif
+
/*
* Take care that 'begin' extensions get to complete before
* 'switch' extensions can run. This means must keep dispatch
@@ -82,6 +91,10 @@ void _Thread_Handler( void )
*/
_Thread_Enable_dispatch();
+#ifdef USE_INIT_FINI
+ if (!doneCons)
+ _init ();
+#endif
switch ( executing->Start.prototype ) {
case THREAD_START_NUMERIC: