diff options
Diffstat (limited to 'cpukit/score/src/threadsetstate.c')
-rw-r--r-- | cpukit/score/src/threadsetstate.c | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/cpukit/score/src/threadsetstate.c b/cpukit/score/src/threadsetstate.c index 02ee70ed9b..2769711dac 100644 --- a/cpukit/score/src/threadsetstate.c +++ b/cpukit/score/src/threadsetstate.c @@ -22,7 +22,7 @@ #endif #include <rtems/score/threadimpl.h> -#include <rtems/score/isrlevel.h> +#include <rtems/score/assert.h> #include <rtems/score/schedulerimpl.h> void _Thread_Set_state( @@ -31,17 +31,19 @@ void _Thread_Set_state( ) { ISR_lock_Context lock_context; - States_Control current_state; + States_Control previous_state; + States_Control next_state; + + _Assert( state != 0 ); _Scheduler_Acquire( the_thread, &lock_context ); - current_state = the_thread->current_state; - if ( _States_Is_ready( current_state ) ) { - the_thread->current_state = state; + previous_state = the_thread->current_state; + next_state = _States_Set( state, previous_state); + the_thread->current_state = next_state; + if ( _States_Is_ready( previous_state ) ) { _Scheduler_Block( the_thread ); - } else { - the_thread->current_state = _States_Set( state, current_state); } _Scheduler_Release( the_thread, &lock_context ); |