score: Fix debug assert

Do not access executing->current_state outside the protection of the
thread state lock.  Add missing state with a comment.
This commit is contained in:
Sebastian Huber
2020-08-31 17:07:19 +02:00
parent 6e6e23384f
commit 5bb93f22fc

View File

@@ -336,6 +336,18 @@ void _Thread_Life_action_handler(
_Thread_State_acquire( executing, lock_context );
/*
* The executing thread runs with thread dispatching disabled right now.
* Other threads may have suspended the executing thread. The thread life
* handler may run in parallel with _Thread_Add_life_change_request() which
* may have set STATES_LIFE_IS_CHANGING.
*/
_Assert(
executing->current_state == STATES_READY
|| executing->current_state == STATES_SUSPENDED
|| executing->current_state == STATES_LIFE_IS_CHANGING
);
_Thread_Change_life_locked(
executing,
THREAD_LIFE_PROTECTED | THREAD_LIFE_RESTARTING,
@@ -348,10 +360,6 @@ void _Thread_Life_action_handler(
_Assert(
_Watchdog_Get_state( &executing->Timer.Watchdog ) == WATCHDOG_INACTIVE
);
_Assert(
executing->current_state == STATES_READY
|| executing->current_state == STATES_SUSPENDED
);
_User_extensions_Destroy_iterators( executing );
_Thread_Load_environment( executing );