summaryrefslogtreecommitdiffstats
path: root/cpukit
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2011-09-09 11:25:23 +0000
committerSebastian Huber <sebastian.huber@embedded-brains.de>2011-09-09 11:25:23 +0000
commit842394f847d4bc8d5a1d7249173d88d277b14b54 (patch)
tree56d83a15fb197705f14e114d3a577847ad73cd37 /cpukit
parent2011-09-09 Sebastian Huber <sebastian.huber@embedded-brains.de> (diff)
downloadrtems-842394f847d4bc8d5a1d7249173d88d277b14b54.tar.bz2
2011-09-09 Sebastian Huber <sebastian.huber@embedded-brains.de>
PR 1901/cpukit * score/src/threadhandler.c: Do not use internal tasks for global initialization in MP configuration.
Diffstat (limited to 'cpukit')
-rw-r--r--cpukit/ChangeLog6
-rw-r--r--cpukit/score/src/threadhandler.c17
2 files changed, 18 insertions, 5 deletions
diff --git a/cpukit/ChangeLog b/cpukit/ChangeLog
index c18adb47af..6b770a14e8 100644
--- a/cpukit/ChangeLog
+++ b/cpukit/ChangeLog
@@ -1,5 +1,11 @@
2011-09-09 Sebastian Huber <sebastian.huber@embedded-brains.de>
+ PR 1901/cpukit
+ * score/src/threadhandler.c: Do not use internal tasks for global
+ initialization in MP configuration.
+
+2011-09-09 Sebastian Huber <sebastian.huber@embedded-brains.de>
+
PR 1844/cpukit
* rtems/include/rtems/rtems/msgmp.h: Define
MESSAGE_QUEUE_MP_PACKET_SIZE.
diff --git a/cpukit/score/src/threadhandler.c b/cpukit/score/src/threadhandler.c
index c688432715..ee42ba0e47 100644
--- a/cpukit/score/src/threadhandler.c
+++ b/cpukit/score/src/threadhandler.c
@@ -89,8 +89,8 @@ void _Thread_Handler( void )
ISR_Level level;
Thread_Control *executing;
#if defined(EXECUTE_GLOBAL_CONSTRUCTORS)
- static char doneConstructors;
- char doneCons;
+ static bool doneConstructors;
+ bool doCons;
#endif
executing = _Thread_Executing;
@@ -110,8 +110,15 @@ void _Thread_Handler( void )
_ISR_Set_level(level);
#if defined(EXECUTE_GLOBAL_CONSTRUCTORS)
- doneCons = doneConstructors;
- doneConstructors = 1;
+ #if defined(RTEMS_MULTIPROCESSING)
+ doCons = !doneConstructors
+ && _Objects_Get_API( executing->Object.id ) != OBJECTS_INTERNAL_API;
+ if (doCons)
+ doneConstructors = true;
+ #else
+ doCons = !doneConstructors;
+ doneConstructors = true;
+ #endif
#endif
#if ( CPU_HARDWARE_FP == TRUE ) || ( CPU_SOFTWARE_FP == TRUE )
@@ -143,7 +150,7 @@ void _Thread_Handler( void )
* in any configuration I know of and it generates a warning on every
* RTEMS target configuration. --joel (12 May 2007)
*/
- if (!doneCons) /* && (volatile void *)_init) */ {
+ if (doCons) /* && (volatile void *)_init) */ {
INIT_NAME ();
#if defined(RTEMS_SMP)