mirror of
https://gitlab.rtems.org/rtems/rtos/rtems.git
synced 2026-09-22 04:25:16 +08:00
score: Add and use _Thread_Owns_resources()
This commit is contained in:
@@ -115,7 +115,7 @@ void _POSIX_Threads_Sporadic_budget_TSR(
|
||||
printk( "TSR %d %d %d\n", the_thread->resource_count,
|
||||
the_thread->current_priority, new_priority );
|
||||
#endif
|
||||
if ( the_thread->resource_count == 0 ) {
|
||||
if ( !_Thread_Owns_resources( the_thread ) ) {
|
||||
/*
|
||||
* If this would make them less important, then do not change it.
|
||||
*/
|
||||
@@ -161,7 +161,7 @@ void _POSIX_Threads_Sporadic_budget_callout(
|
||||
printk( "callout %d %d %d\n", the_thread->resource_count,
|
||||
the_thread->current_priority, new_priority );
|
||||
#endif
|
||||
if ( the_thread->resource_count == 0 ) {
|
||||
if ( !_Thread_Owns_resources( the_thread ) ) {
|
||||
/*
|
||||
* Make sure we are actually lowering it. If they have lowered it
|
||||
* to logically lower than sched_ss_low_priority, then we do not want to
|
||||
|
||||
@@ -48,7 +48,7 @@ rtems_status_code rtems_task_set_priority(
|
||||
the_thread->real_priority = _RTEMS_tasks_Priority_to_Core(
|
||||
new_priority
|
||||
);
|
||||
if ( the_thread->resource_count == 0 ||
|
||||
if ( !_Thread_Owns_resources( the_thread ) ||
|
||||
the_thread->current_priority > new_priority )
|
||||
_Thread_Change_priority( the_thread, new_priority, false );
|
||||
}
|
||||
|
||||
@@ -785,6 +785,23 @@ RTEMS_INLINE_ROUTINE bool _Thread_Is_life_changing(
|
||||
return ( life_state & THREAD_LIFE_RESTARTING_TERMINATING ) != 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Returns true if the thread owns resources, and false otherwise.
|
||||
*
|
||||
* Resources are accounted with the Thread_Control::resource_count resource
|
||||
* counter. This counter is used by semaphore objects for example.
|
||||
*
|
||||
* @param[in] the_thread The thread.
|
||||
*/
|
||||
RTEMS_INLINE_ROUTINE bool _Thread_Owns_resources(
|
||||
const Thread_Control *the_thread
|
||||
)
|
||||
{
|
||||
bool owns_resources = the_thread->resource_count != 0;
|
||||
|
||||
return owns_resources;
|
||||
}
|
||||
|
||||
RTEMS_INLINE_ROUTINE void _Thread_Debug_set_real_processor(
|
||||
Thread_Control *the_thread,
|
||||
Per_CPU_Control *cpu
|
||||
|
||||
@@ -167,7 +167,7 @@ CORE_mutex_Status _CORE_mutex_Surrender(
|
||||
* inherited priority must be lowered if this is the last
|
||||
* mutex (i.e. resource) this task has.
|
||||
*/
|
||||
if ( holder->resource_count == 0 &&
|
||||
if ( !_Thread_Owns_resources( holder ) &&
|
||||
holder->real_priority != holder->current_priority ) {
|
||||
_Thread_Change_priority( holder, holder->real_priority, true );
|
||||
}
|
||||
|
||||
@@ -47,7 +47,7 @@ static void _Thread_Make_zombie( Thread_Control *the_thread )
|
||||
ISR_lock_Context lock_context;
|
||||
Thread_Zombie_control *zombies = &_Thread_Zombies;
|
||||
|
||||
if ( the_thread->resource_count != 0 ) {
|
||||
if ( _Thread_Owns_resources( the_thread ) ) {
|
||||
_Terminate(
|
||||
INTERNAL_ERROR_CORE,
|
||||
false,
|
||||
|
||||
Reference in New Issue
Block a user