diff options
Diffstat (limited to 'cpukit/score/src/scheduleredfchangepriority.c')
-rw-r--r-- | cpukit/score/src/scheduleredfchangepriority.c | 30 |
1 files changed, 19 insertions, 11 deletions
diff --git a/cpukit/score/src/scheduleredfchangepriority.c b/cpukit/score/src/scheduleredfchangepriority.c index 6efbf87ad3..a0f5ec7061 100644 --- a/cpukit/score/src/scheduleredfchangepriority.c +++ b/cpukit/score/src/scheduleredfchangepriority.c @@ -43,17 +43,25 @@ Scheduler_Void_or_thread _Scheduler_EDF_Change_priority( bool prepend_it ) { - Scheduler_EDF_Context *context = - _Scheduler_EDF_Get_context( scheduler ); - Scheduler_EDF_Node *node = _Scheduler_EDF_Thread_get_node( the_thread ); - - _RBTree_Extract( &context->Ready, &node->Node ); - _RBTree_Insert( - &context->Ready, - &node->Node, - _Scheduler_EDF_Compare, - false - ); + Scheduler_EDF_Context *context; + Scheduler_EDF_Node *node; + + context = _Scheduler_EDF_Get_context( scheduler ); + node = _Scheduler_EDF_Thread_get_node( the_thread ); + + if ( ( new_priority & SCHEDULER_EDF_PRIO_MSB ) != 0 ) { + node->background_priority = new_priority; + } + + node->current_priority = new_priority; + + _Scheduler_EDF_Extract( context, node ); + + if ( prepend_it ) { + _Scheduler_EDF_Enqueue_first( context, node, new_priority ); + } else { + _Scheduler_EDF_Enqueue( context, node, new_priority ); + } _Scheduler_EDF_Schedule_body( scheduler, the_thread, false ); |