score: Add _Thread_Set_state_locked()

This makes it possible to do thread state and thread life changes
together under protection of the thread state lock.

Update #2555.
Update #2626.
This commit is contained in:
Sebastian Huber
2016-05-20 07:49:38 +02:00
parent 232147ddc1
commit 9a99ce15d0
2 changed files with 22 additions and 6 deletions
@@ -247,6 +247,11 @@ States_Control _Thread_Clear_state(
States_Control state
);
States_Control _Thread_Set_state_locked(
Thread_Control *the_thread,
States_Control state
);
/**
* @brief Sets the specified thread state.
*
+17 -6
View File
@@ -25,18 +25,16 @@
#include <rtems/score/assert.h>
#include <rtems/score/schedulerimpl.h>
States_Control _Thread_Set_state(
States_Control _Thread_Set_state_locked(
Thread_Control *the_thread,
States_Control state
)
{
ISR_lock_Context lock_context;
States_Control previous_state;
States_Control next_state;
States_Control previous_state;
States_Control next_state;
_Assert( state != 0 );
_Thread_State_acquire( the_thread, &lock_context );
_Assert( _Thread_State_is_owner( the_thread ) );
previous_state = the_thread->current_state;
next_state = _States_Set( state, previous_state);
@@ -46,6 +44,19 @@ States_Control _Thread_Set_state(
_Scheduler_Block( the_thread );
}
return previous_state;
}
States_Control _Thread_Set_state(
Thread_Control *the_thread,
States_Control state
)
{
ISR_lock_Context lock_context;
States_Control previous_state;
_Thread_State_acquire( the_thread, &lock_context );
previous_state = _Thread_Set_state_locked( the_thread, state );
_Thread_State_release( the_thread, &lock_context );
return previous_state;