From 7ee4e72e4b2052139d296100f0836403906bd317 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Thu, 20 Feb 2014 17:05:44 +0100 Subject: score: _Thread_Start_multitasking() Fix serious race-condition. Read the heir after the per-CPU lock acquire. --- cpukit/score/src/threadstartmultitasking.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) 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 -- cgit v1.2.3