[Bug 1901] New: Global C++ constructors with MP configuration
bugzilla-daemon at rtems.org
bugzilla-daemon at rtems.org
Tue Aug 23 09:21:55 UTC 2011
https://www.rtems.org/bugzilla/show_bug.cgi?id=1901
Summary: Global C++ constructors with MP configuration
Product: RTEMS
Version: HEAD
Platform: All
OS/Version: RTEMS
Status: NEW
Severity: normal
Priority: P3
Component: cpukit
AssignedTo: joel.sherrill at oarcorp.com
ReportedBy: sebastian.huber at embedded-brains.de
The global C++ constructors are supposed to execute within the context of the
first initialization thread. In the MP configuration the MP thread will
execute before the initialization threads. In this case the current logic
leads to an execution of the global C++ constructors within the MP thread.
This may result in dead locks.
Please have a look at this patch:
Index: cpukit/score/src/threadhandler.c
===================================================================
--- cpukit/score/src/threadhandler.c (revision 5237)
+++ cpukit/score/src/threadhandler.c (working copy)
@@ -88,8 +88,8 @@
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,10 @@
_ISR_Set_level(level);
#if defined(EXECUTE_GLOBAL_CONSTRUCTORS)
- doneCons = doneConstructors;
- doneConstructors = 1;
+ doCons = !doneConstructors
+ && _Objects_Get_API( executing->Object.id ) != OBJECTS_INTERNAL_API;
+ if (doCons)
+ doneConstructors = true;
#endif
#if ( CPU_HARDWARE_FP == TRUE ) || ( CPU_SOFTWARE_FP == TRUE )
@@ -143,7 +145,7 @@
* 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)
Is it better to use the RTEMS_MULTIPROCESSING define to make this conditional?
--
Configure bugmail: https://www.rtems.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are watching all bug changes.
More information about the bugs
mailing list