diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2014-02-20 17:05:44 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2014-02-21 09:38:25 +0100 |
commit | 7ee4e72e4b2052139d296100f0836403906bd317 (patch) | |
tree | 553cc802f9d23cf66b9edb495bea37f3dd3137bc /cpukit | |
parent | score: Rename _Internal_error_Occurred() (diff) | |
download | rtems-7ee4e72e4b2052139d296100f0836403906bd317.tar.bz2 |
score: _Thread_Start_multitasking()
Fix serious race-condition. Read the heir after the per-CPU lock
acquire.
Diffstat (limited to 'cpukit')
-rw-r--r-- | 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 b05ccb48c3..d73e5b4194 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 |