[RTEMS Project] #4435: Thread cancellation may produce ready threads with an active thread timer
RTEMS trac
trac at rtems.org
Wed May 26 12:41:24 UTC 2021
#4435: Thread cancellation may produce ready threads with an active thread timer
-----------------------------+------------------------------
Reporter: Sebastian Huber | Owner: Sebastian Huber
Type: defect | Status: closed
Priority: normal | Milestone: 6.1
Component: score | Version: 6
Severity: normal | Resolution: fixed
Keywords: | Blocked By:
Blocking: |
-----------------------------+------------------------------
Changes (by Sebastian Huber <sebastian.huber@…>):
* status: assigned => closed
* resolution: => fixed
Comment:
In [changeset:"ce6319ade410d304c187de6d107b52da4a32e255/rtems"
ce6319a/rtems]:
{{{
#!CommitTicketReference repository="rtems"
revision="ce6319ade410d304c187de6d107b52da4a32e255"
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.
}}}
--
Ticket URL: <http://devel.rtems.org/ticket/4435#comment:1>
RTEMS Project <http://www.rtems.org/>
RTEMS Project
More information about the bugs
mailing list