diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2017-10-19 13:41:25 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2017-10-24 09:37:28 +0200 |
commit | 6de1f92121f947f9c379747d66135fd8a500d0f5 (patch) | |
tree | 49a574229864c6e158f6eb1295795500beaa5d62 | |
parent | score: _Watchdog_Per_CPU_lazy_insert_monotonic() (diff) | |
download | rtems-6de1f92121f947f9c379747d66135fd8a500d0f5.tar.bz2 |
score: Add _Thread_Continue()
Update #3117.
Update #3182.
-rw-r--r-- | cpukit/score/include/rtems/score/threadimpl.h | 18 | ||||
-rw-r--r-- | cpukit/score/src/threadtimeout.c | 25 |
2 files changed, 33 insertions, 10 deletions
diff --git a/cpukit/score/include/rtems/score/threadimpl.h b/cpukit/score/include/rtems/score/threadimpl.h index 8c87f98cb8..5f6a5eb2d0 100644 --- a/cpukit/score/include/rtems/score/threadimpl.h +++ b/cpukit/score/include/rtems/score/threadimpl.h @@ -1841,11 +1841,25 @@ RTEMS_INLINE_ROUTINE Status_Control _Thread_Wait_get_status( } /** + * @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, diff --git a/cpukit/score/src/threadtimeout.c b/cpukit/score/src/threadtimeout.c index 8bcdc3806d..8ea5a651f0 100644 --- a/cpukit/score/src/threadtimeout.c +++ b/cpukit/score/src/threadtimeout.c @@ -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 ); +} |