forked from Imagelibrary/rtems
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:
@@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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 ) );
|
||||
|
||||
Reference in New Issue
Block a user