diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2016-05-12 17:39:22 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2016-05-20 07:49:37 +0200 |
commit | c99eb50b9f66e76cdd6aa0833321550c9b9e655c (patch) | |
tree | 6b0960d35b0821c2ce9e24b6590518c3337cb969 /cpukit/score/src/threadrestart.c | |
parent | score: Add _Thread_Raise_real_priority() (diff) | |
download | rtems-c99eb50b9f66e76cdd6aa0833321550c9b9e655c.tar.bz2 |
score: Rework _Thread_Exit()
Rework _Thread_Exit() to use _Thread_Change_life_locked().
Update #2555.
Update #2626.
Diffstat (limited to 'cpukit/score/src/threadrestart.c')
-rw-r--r-- | cpukit/score/src/threadrestart.c | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/cpukit/score/src/threadrestart.c b/cpukit/score/src/threadrestart.c index fe9bca152e..e2f82a34ff 100644 --- a/cpukit/score/src/threadrestart.c +++ b/cpukit/score/src/threadrestart.c @@ -401,12 +401,24 @@ void _Thread_Close( Thread_Control *the_thread, Thread_Control *executing ) void _Thread_Exit( Thread_Control *executing ) { - _Thread_Request_life_change( - executing, + ISR_lock_Context lock_context; + + _Assert( + _Watchdog_Get_state( &executing->Timer.Watchdog ) == WATCHDOG_INACTIVE + ); + _Assert( + executing->current_state == STATES_READY + || executing->current_state == STATES_SUSPENDED + ); + + _Thread_State_acquire( executing, &lock_context ); + _Thread_Change_life_locked( executing, - executing->current_priority, - THREAD_LIFE_TERMINATING + 0, + THREAD_LIFE_TERMINATING, + THREAD_LIFE_PROTECTED ); + _Thread_State_release( executing, &lock_context ); } bool _Thread_Restart( |