mirror of
https://gitlab.rtems.org/rtems/rtos/rtems.git
synced 2026-09-21 09:05:06 +08:00
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:
@@ -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.
|
||||
*
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user