[rtems commit] score: _Thread_Start_multitasking()
Sebastian Huber
sebh at rtems.org
Fri Feb 21 08:33:11 UTC 2014
Module: rtems
Branch: master
Commit: 7ee4e72e4b2052139d296100f0836403906bd317
Changeset: http://git.rtems.org/rtems/commit/?id=7ee4e72e4b2052139d296100f0836403906bd317
Author: Sebastian Huber <sebastian.huber at embedded-brains.de>
Date: Thu Feb 20 17:05:44 2014 +0100
score: _Thread_Start_multitasking()
Fix serious race-condition. Read the heir after the per-CPU lock
acquire.
---
cpukit/score/src/threadstartmultitasking.c | 6 +++++-
1 files changed, 5 insertions(+), 1 deletions(-)
diff --git a/cpukit/score/src/threadstartmultitasking.c b/cpukit/score/src/threadstartmultitasking.c
index b05ccb4..d73e5b4 100644
--- a/cpukit/score/src/threadstartmultitasking.c
+++ b/cpukit/score/src/threadstartmultitasking.c
@@ -23,7 +23,7 @@
void _Thread_Start_multitasking( void )
{
Per_CPU_Control *self_cpu = _Per_CPU_Get();
- Thread_Control *heir = self_cpu->heir;
+ Thread_Control *heir;
#if defined(RTEMS_SMP)
_Per_CPU_Change_state( self_cpu, PER_CPU_STATE_UP );
@@ -35,7 +35,11 @@ void _Thread_Start_multitasking( void )
*/
_Per_CPU_Acquire( self_cpu );
self_cpu->thread_dispatch_disable_level = 1;
+#endif
+
+ heir = self_cpu->heir;
+#if defined(RTEMS_SMP)
self_cpu->executing->is_executing = false;
heir->is_executing = true;
#endif
More information about the vc
mailing list