diff options
Diffstat (limited to '')
-rw-r--r-- | cpukit/include/rtems/score/threaddispatch.h | 11 | ||||
-rw-r--r-- | cpukit/posix/src/pthreadexit.c | 2 | ||||
-rw-r--r-- | cpukit/rtems/src/taskexit.c | 2 | ||||
-rw-r--r-- | cpukit/score/src/threaddispatch.c | 3 | ||||
-rw-r--r-- | cpukit/score/src/threadrestart.c | 4 |
5 files changed, 18 insertions, 4 deletions
diff --git a/cpukit/include/rtems/score/threaddispatch.h b/cpukit/include/rtems/score/threaddispatch.h index 707b449771..7f3673a0d5 100644 --- a/cpukit/include/rtems/score/threaddispatch.h +++ b/cpukit/include/rtems/score/threaddispatch.h @@ -126,6 +126,17 @@ void _Thread_Dispatch( void ); void _Thread_Dispatch_direct( Per_CPU_Control *cpu_self ); /** + * @brief Directly do a thread dispatch and do not return. + * + * @param cpu_self is the current processor. + * + * @see _Thread_Dispatch_direct(). + */ +RTEMS_NO_RETURN void _Thread_Dispatch_direct_no_return( + Per_CPU_Control *cpu_self +); + +/** * @brief Performs a thread dispatch on the current processor. * * On entry the thread dispatch disable level must be equal to one and diff --git a/cpukit/posix/src/pthreadexit.c b/cpukit/posix/src/pthreadexit.c index 502476d141..657497010b 100644 --- a/cpukit/posix/src/pthreadexit.c +++ b/cpukit/posix/src/pthreadexit.c @@ -35,6 +35,6 @@ void pthread_exit( void *value_ptr ) _Thread_Exit( executing, THREAD_LIFE_TERMINATING, value_ptr ); - _Thread_Dispatch_direct( cpu_self ); + _Thread_Dispatch_direct_no_return( cpu_self ); RTEMS_UNREACHABLE(); } diff --git a/cpukit/rtems/src/taskexit.c b/cpukit/rtems/src/taskexit.c index c08089e956..4c8420d255 100644 --- a/cpukit/rtems/src/taskexit.c +++ b/cpukit/rtems/src/taskexit.c @@ -42,6 +42,6 @@ void rtems_task_exit( void ) NULL ); - _Thread_Dispatch_direct( cpu_self ); + _Thread_Dispatch_direct_no_return( cpu_self ); RTEMS_UNREACHABLE(); } diff --git a/cpukit/score/src/threaddispatch.c b/cpukit/score/src/threaddispatch.c index 2fd125dd76..fd3f4eda4d 100644 --- a/cpukit/score/src/threaddispatch.c +++ b/cpukit/score/src/threaddispatch.c @@ -358,6 +358,9 @@ void _Thread_Dispatch_direct( Per_CPU_Control *cpu_self ) _Thread_Do_dispatch( cpu_self, level ); } +RTEMS_ALIAS( _Thread_Dispatch_direct ) void +_Thread_Dispatch_direct_no_return( Per_CPU_Control * ); + void _Thread_Dispatch_enable( Per_CPU_Control *cpu_self ) { uint32_t disable_level = cpu_self->thread_dispatch_disable_level; diff --git a/cpukit/score/src/threadrestart.c b/cpukit/score/src/threadrestart.c index 3c0190164e..364d67d04e 100644 --- a/cpukit/score/src/threadrestart.c +++ b/cpukit/score/src/threadrestart.c @@ -288,7 +288,7 @@ void _Thread_Life_action_handler( if ( _Thread_Is_life_terminating( previous_life_state ) ) { cpu_self = _Thread_Wait_for_join( executing, cpu_self ); _Thread_Make_zombie( executing ); - _Thread_Dispatch_direct( cpu_self ); + _Thread_Dispatch_direct_no_return( cpu_self ); RTEMS_UNREACHABLE(); } @@ -610,7 +610,7 @@ void _Thread_Restart_self( _Thread_Wait_release_default( executing, lock_context ); _Thread_Priority_update( &queue_context ); - _Thread_Dispatch_direct( cpu_self ); + _Thread_Dispatch_direct_no_return( cpu_self ); RTEMS_UNREACHABLE(); } |