Opened on 07/19/22 at 06:40:24
Closed on 07/28/22 at 05:45:19
#4679 closed enhancement (fixed)
Use priority inheritance for thread join
Reported by: | Sebastian Huber | Owned by: | Sebastian Huber |
---|---|---|---|
Priority: | normal | Milestone: | 6.1 |
Component: | score | Version: | 6 |
Severity: | normal | Keywords: | |
Cc: | Blocked By: | ||
Blocking: |
Description (last modified by Sebastian Huber)
Threads may join the thread termination of another thread using the pthread_join()
or rtems_task_delete()
directives. Currently, the thread cancel operation uses a special case priority boosting mechanism:
static void _Thread_Raise_real_priority( Thread_Control *the_thread, Priority_Control priority ) { Thread_queue_Context queue_context; _Thread_queue_Context_initialize( &queue_context ); _Thread_queue_Context_clear_priority_updates( &queue_context ); _Thread_Wait_acquire( the_thread, &queue_context ); if ( priority < the_thread->Real_priority.priority ) { _Thread_Priority_change( the_thread, &the_thread->Real_priority, priority, PRIORITY_GROUP_LAST, &queue_context ); } _Thread_Wait_release( the_thread, &queue_context ); _Thread_Priority_update( &queue_context ); }
The problem is that this approach is not transitive, it does not account for priority adjustments of the calling task while waiting for the join, clustered scheduling is not supported, and deadlocks are not detected. All these problems are fixed by using a priority inheritance thread queue for the join operation.
Change History (4)
comment:1 Changed on 07/19/22 at 06:44:07 by Sebastian Huber
Description: | modified (diff) |
---|
comment:2 Changed on 07/28/22 at 05:36:09 by Sebastian Huber <sebastian.huber@…>
comment:3 Changed on 07/28/22 at 05:36:11 by Sebastian Huber <sebastian.huber@…>
comment:4 Changed on 07/28/22 at 05:45:19 by Sebastian Huber <sebastian.huber@…>
Resolution: | → fixed |
---|---|
Status: | assigned → closed |
In 31036f1d/rtems:
Note: See
TracTickets for help on using
tickets.
In 81fd510/rtems-docs: