forked from Imagelibrary/rtems
@@ -1840,12 +1840,26 @@ RTEMS_INLINE_ROUTINE Status_Control _Thread_Wait_get_status(
|
||||
return (Status_Control) the_thread->Wait.return_code;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Cancels a blocking operation so that the thread can continue its
|
||||
* execution.
|
||||
*
|
||||
* In case this function actually cancelled the blocking operation, then the
|
||||
* thread wait return code is set to the specified status.
|
||||
*
|
||||
* A specialization of this function is _Thread_Timeout().
|
||||
*
|
||||
* @param[in] the_thread The thread.
|
||||
* @param[in] status The thread wait status.
|
||||
*/
|
||||
void _Thread_Continue( Thread_Control *the_thread, Status_Control status );
|
||||
|
||||
/**
|
||||
* @brief General purpose thread wait timeout.
|
||||
*
|
||||
* @param[in] watchdog The thread timer watchdog.
|
||||
* @param[in] the_watchdog The thread timer watchdog.
|
||||
*/
|
||||
void _Thread_Timeout( Watchdog_Control *watchdog );
|
||||
void _Thread_Timeout( Watchdog_Control *the_watchdog );
|
||||
|
||||
RTEMS_INLINE_ROUTINE void _Thread_Timer_initialize(
|
||||
Thread_Timer_information *timer,
|
||||
|
||||
@@ -22,14 +22,11 @@
|
||||
#include <rtems/score/threadimpl.h>
|
||||
#include <rtems/score/status.h>
|
||||
|
||||
void _Thread_Timeout( Watchdog_Control *watchdog )
|
||||
void _Thread_Continue( Thread_Control *the_thread, Status_Control status )
|
||||
{
|
||||
Thread_Control *the_thread;
|
||||
Thread_queue_Context queue_context;
|
||||
Thread_Wait_flags wait_flags;
|
||||
bool unblock;
|
||||
|
||||
the_thread = RTEMS_CONTAINER_OF( watchdog, Thread_Control, Timer.Watchdog );
|
||||
Thread_queue_Context queue_context;
|
||||
Thread_Wait_flags wait_flags;
|
||||
bool unblock;
|
||||
|
||||
_Thread_queue_Context_initialize( &queue_context );
|
||||
_Thread_queue_Context_clear_priority_updates( &queue_context );
|
||||
@@ -44,7 +41,7 @@ void _Thread_Timeout( Watchdog_Control *watchdog )
|
||||
|
||||
_Thread_Wait_cancel( the_thread, &queue_context );
|
||||
|
||||
the_thread->Wait.return_code = STATUS_TIMEOUT;
|
||||
the_thread->Wait.return_code = status;
|
||||
|
||||
wait_class = wait_flags & THREAD_WAIT_CLASS_MASK;
|
||||
ready_again = wait_class | THREAD_WAIT_STATE_READY_AGAIN;
|
||||
@@ -82,3 +79,15 @@ void _Thread_Timeout( Watchdog_Control *watchdog )
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
void _Thread_Timeout( Watchdog_Control *the_watchdog )
|
||||
{
|
||||
Thread_Control *the_thread;
|
||||
|
||||
the_thread = RTEMS_CONTAINER_OF(
|
||||
the_watchdog,
|
||||
Thread_Control,
|
||||
Timer.Watchdog
|
||||
);
|
||||
_Thread_Continue( the_thread, STATUS_TIMEOUT );
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user