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;
|
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.
|
* @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(
|
RTEMS_INLINE_ROUTINE void _Thread_Timer_initialize(
|
||||||
Thread_Timer_information *timer,
|
Thread_Timer_information *timer,
|
||||||
|
|||||||
@@ -22,14 +22,11 @@
|
|||||||
#include <rtems/score/threadimpl.h>
|
#include <rtems/score/threadimpl.h>
|
||||||
#include <rtems/score/status.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_queue_Context queue_context;
|
Thread_Wait_flags wait_flags;
|
||||||
Thread_Wait_flags wait_flags;
|
bool unblock;
|
||||||
bool unblock;
|
|
||||||
|
|
||||||
the_thread = RTEMS_CONTAINER_OF( watchdog, Thread_Control, Timer.Watchdog );
|
|
||||||
|
|
||||||
_Thread_queue_Context_initialize( &queue_context );
|
_Thread_queue_Context_initialize( &queue_context );
|
||||||
_Thread_queue_Context_clear_priority_updates( &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 );
|
_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;
|
wait_class = wait_flags & THREAD_WAIT_CLASS_MASK;
|
||||||
ready_again = wait_class | THREAD_WAIT_STATE_READY_AGAIN;
|
ready_again = wait_class | THREAD_WAIT_STATE_READY_AGAIN;
|
||||||
@@ -82,3 +79,15 @@ void _Thread_Timeout( Watchdog_Control *watchdog )
|
|||||||
#endif
|
#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