[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