score: Fix initialization of thread queue context

Set Thread_queue_Context::timeout_absolute in
_Thread_queue_Context_set_timeout_argument() to avoid using it uninitialized.

The bug was introduced by a89ecaa1a9.
This commit is contained in:
Sebastian Huber
2021-06-10 07:44:45 +02:00
parent f83676d91f
commit 6641cc87b8
6 changed files with 15 additions and 9 deletions

View File

@@ -201,18 +201,24 @@ _Thread_queue_Context_set_timeout_ticks(
/**
* @brief Sets the timeout argument in the thread queue context.
*
* @param[out] queue_context The thread queue context.
* @param arg The timeout argument.
* @param[out] queue_context is the thread queue context.
*
* @param arg is the timeout argument.
*
* @param absolute is true, if the timeout shall be absolute, otherwise it
* shall be relative to the current time of the clock.
*
* @see _Thread_queue_Enqueue().
*/
RTEMS_INLINE_ROUTINE void
_Thread_queue_Context_set_timeout_argument(
Thread_queue_Context *queue_context,
const void *arg
const void *arg,
bool absolute
)
{
queue_context->Timeout.arg = arg;
queue_context->timeout_absolute = absolute;
}
/**

View File

@@ -109,7 +109,7 @@ int _POSIX_Condition_variables_Wait_support(
_Thread_queue_Context_initialize( &queue_context );
if ( abstime != NULL ) {
_Thread_queue_Context_set_timeout_argument( &queue_context, abstime );
_Thread_queue_Context_set_timeout_argument( &queue_context, abstime, true );
if ( _POSIX_Condition_variables_Get_clock( flags ) == CLOCK_MONOTONIC ) {
_Thread_queue_Context_set_enqueue_callout(

View File

@@ -69,7 +69,7 @@ ssize_t _POSIX_Message_queue_Receive_support(
}
_Thread_queue_Context_set_enqueue_callout( &queue_context, enqueue_callout );
_Thread_queue_Context_set_timeout_argument( &queue_context, abstime );
_Thread_queue_Context_set_timeout_argument( &queue_context, abstime, true );
/*
* Now if something goes wrong, we return a "length" of -1

View File

@@ -70,7 +70,7 @@ int _POSIX_Message_queue_Send_support(
}
_Thread_queue_Context_set_enqueue_callout( &queue_context, enqueue_callout );
_Thread_queue_Context_set_timeout_argument( &queue_context, abstime );
_Thread_queue_Context_set_timeout_argument( &queue_context, abstime, true );
_CORE_message_queue_Acquire_critical(
&the_mq->Message_queue,

View File

@@ -69,7 +69,7 @@ int _POSIX_Mutex_Lock_support(
executing = _POSIX_Mutex_Acquire( the_mutex, &queue_context );
_Thread_queue_Context_set_enqueue_callout( &queue_context, enqueue_callout);
_Thread_queue_Context_set_timeout_argument( &queue_context, abstime );
_Thread_queue_Context_set_timeout_argument( &queue_context, abstime, true );
switch ( _POSIX_Mutex_Get_protocol( flags ) ) {
case POSIX_MUTEX_PRIORITY_CEILING:

View File

@@ -188,7 +188,7 @@ int _Condition_Wait_timed(
&context.Base,
_Condition_Enqueue_with_timeout
);
_Thread_queue_Context_set_timeout_argument( &context.Base, abstime );
_Thread_queue_Context_set_timeout_argument( &context.Base, abstime, true );
executing = _Condition_Do_wait( _condition, _mutex, &context );
eno = STATUS_GET_POSIX( _Thread_Wait_get_status( executing ) );
_Mutex_Acquire( _mutex );
@@ -243,7 +243,7 @@ int _Condition_Wait_recursive_timed(
&context.Base,
_Condition_Enqueue_with_timeout
);
_Thread_queue_Context_set_timeout_argument( &context.Base, abstime );
_Thread_queue_Context_set_timeout_argument( &context.Base, abstime, true );
nest_level = _Condition_Unnest_mutex( _mutex );
executing = _Condition_Do_wait( _condition, &_mutex->_Mutex, &context );
eno = STATUS_GET_POSIX( _Thread_Wait_get_status( executing ) );