diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2011-09-09 11:25:23 +0000 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2011-09-09 11:25:23 +0000 |
commit | 842394f847d4bc8d5a1d7249173d88d277b14b54 (patch) | |
tree | 56d83a15fb197705f14e114d3a577847ad73cd37 /cpukit | |
parent | 2011-09-09 Sebastian Huber <sebastian.huber@embedded-brains.de> (diff) | |
download | rtems-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/ChangeLog | 6 | ||||
-rw-r--r-- | cpukit/score/src/threadhandler.c | 17 |
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) |