summaryrefslogtreecommitdiffstats
path: root/cpukit/score/src/threadrestart.c
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2016-05-12 17:39:22 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2016-05-20 07:49:37 +0200
commitc99eb50b9f66e76cdd6aa0833321550c9b9e655c (patch)
tree6b0960d35b0821c2ce9e24b6590518c3337cb969 /cpukit/score/src/threadrestart.c
parentscore: Add _Thread_Raise_real_priority() (diff)
downloadrtems-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.c20
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(