[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