score: _CORE_mutex_Seize_interrupt_blocking()

Move some code into _CORE_mutex_Seize_interrupt_blocking() so that the
thread queue handling is in one place.
This commit is contained in:
Sebastian Huber
2015-04-23 10:27:07 +02:00
parent 9f10911d2b
commit be6c4611ac
2 changed files with 15 additions and 7 deletions

View File

@@ -187,11 +187,13 @@ RTEMS_INLINE_ROUTINE int _CORE_mutex_Seize_interrupt_trylock_body(
* @param[in,out] the_mutex is the mutex to attempt to lock
* @param[in,out] executing The currently executing thread.
* @param[in] timeout is the maximum number of ticks to block
* @param[in] lock_context is the interrupt level
*/
void _CORE_mutex_Seize_interrupt_blocking(
CORE_mutex_Control *the_mutex,
Thread_Control *executing,
Watchdog_Interval timeout
Watchdog_Interval timeout,
ISR_lock_Context *lock_context
);
/**
@@ -264,12 +266,13 @@ RTEMS_INLINE_ROUTINE void _CORE_mutex_Seize_body(
executing->Wait.return_code =
CORE_MUTEX_STATUS_UNSATISFIED_NOWAIT;
} else {
_Thread_queue_Enter_critical_section( &the_mutex->Wait_queue );
executing->Wait.queue = &the_mutex->Wait_queue;
executing->Wait.id = id;
_Thread_Disable_dispatch();
_ISR_lock_ISR_enable( lock_context );
_CORE_mutex_Seize_interrupt_blocking( the_mutex, executing, timeout );
_CORE_mutex_Seize_interrupt_blocking(
the_mutex,
executing,
timeout,
lock_context
);
}
}
}

View File

@@ -49,9 +49,14 @@ void _CORE_mutex_Seize(
void _CORE_mutex_Seize_interrupt_blocking(
CORE_mutex_Control *the_mutex,
Thread_Control *executing,
Watchdog_Interval timeout
Watchdog_Interval timeout,
ISR_lock_Context *lock_context
)
{
_Thread_queue_Enter_critical_section( &the_mutex->Wait_queue );
executing->Wait.queue = &the_mutex->Wait_queue;
_Thread_Disable_dispatch();
_ISR_lock_ISR_enable( lock_context );
if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) ) {
Thread_Control *holder = the_mutex->holder;