diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2021-05-20 17:15:53 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2021-05-26 13:40:24 +0200 |
commit | ce6319ade410d304c187de6d107b52da4a32e255 (patch) | |
tree | f5fa9164cc353bd726f7e794612630f874917aa9 /cpukit/headers.am | |
parent | posix: Allow pthread_cancel() from within ISRs (diff) | |
download | rtems-ce6319ade410d304c187de6d107b52da4a32e255.tar.bz2 |
score: Fix _Thread_Cancel()
The _Thread_Cancel() (in contrast to _Thread_Restart() which used a
similar code block) may have produced ready threads with an active timer
in case the thread to cancel had its thread life protection enabled. The
problem was this code block:
Priority_Control priority;
_Thread_Add_life_change_request( the_thread );
if ( _Thread_Is_life_change_allowed( previous ) ) {
_Thread_State_release( the_thread, &lock_context );
_Thread_queue_Extract_with_proxy( the_thread );
_Thread_Timer_remove( the_thread );
} else {
_Thread_Clear_state_locked( the_thread, STATES_SUSPENDED );
_Thread_State_release( the_thread, &lock_context );
}
priority = _Thread_Get_priority( executing );
_Thread_Raise_real_priority( the_thread, priority );
_Thread_Remove_life_change_request( the_thread );
The life change request should only be added/removed if a life change is
allowed (see _Thread_Restart()). Add _Thread_Try_life_change_request()
and use it in _Thread_Cancel() and _Thread_Restart().
Close #4435.
Diffstat (limited to 'cpukit/headers.am')
0 files changed, 0 insertions, 0 deletions