diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2021-02-16 08:15:10 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2021-02-20 15:18:49 +0100 |
commit | f6a97f59925e0f6f880fdc5ce9e94a84e5db2998 (patch) | |
tree | 83558db9e431ec5b86587779b4c7bf7260904b02 /cpukit/rtems/src/signalsend.c | |
parent | rtems: Move _Signal_Action_handler() (diff) | |
download | rtems-f6a97f59925e0f6f880fdc5ce9e94a84e5db2998.tar.bz2 |
rtems: Simplify signal handling
Remove superfluous ASR_Information::signals_posted. Move code out of
trivial inline functions.
Update #4244.
Diffstat (limited to 'cpukit/rtems/src/signalsend.c')
-rw-r--r-- | cpukit/rtems/src/signalsend.c | 23 |
1 files changed, 10 insertions, 13 deletions
diff --git a/cpukit/rtems/src/signalsend.c b/cpukit/rtems/src/signalsend.c index fc8a66b6c6..606ddfcb53 100644 --- a/cpukit/rtems/src/signalsend.c +++ b/cpukit/rtems/src/signalsend.c @@ -21,14 +21,13 @@ #endif #include <rtems/rtems/signalimpl.h> -#include <rtems/rtems/asrimpl.h> #include <rtems/rtems/tasksdata.h> #include <rtems/score/threaddispatch.h> #include <rtems/score/threadimpl.h> #include <rtems/sysinit.h> -void _Signal_Action_handler( +static void _Signal_Action_handler( Thread_Control *executing, Thread_Action *action, ISR_lock_Context *lock_context @@ -41,23 +40,20 @@ void _Signal_Action_handler( (void) action; - /* - * Signal Processing - */ - api = executing->API_Extensions[ THREAD_API_RTEMS ]; asr = &api->Signal; - signal_set = _ASR_Get_posted_signals( asr ); - if ( signal_set == 0 ) { - return; - } + /* Get and clear the pending signals */ + signal_set = asr->signals_pending; + _Assert( signal_set != 0 ); + asr->signals_pending = 0; _Thread_State_release( executing, lock_context ); rtems_task_mode( asr->mode_set, RTEMS_ALL_MODE_MASKS, &prev_mode ); - (*asr->handler)( signal_set ); + /* Call the ASR handler in the ASR processing mode */ + ( *asr->handler )( signal_set ); rtems_task_mode( prev_mode, RTEMS_ALL_MODE_MASKS, &prev_mode ); @@ -98,10 +94,12 @@ rtems_status_code rtems_signal_send( return RTEMS_NOT_DEFINED; } + /* Make the signals of the set pending */ + asr->signals_pending |= signal_set; + if ( asr->is_enabled ) { Per_CPU_Control *cpu_self; - _ASR_Post_signals( signal_set, &asr->signals_posted ); _Thread_Add_post_switch_action( the_thread, &api->Signal_action, @@ -111,7 +109,6 @@ rtems_status_code rtems_signal_send( _Thread_State_release( the_thread, &lock_context ); _Thread_Dispatch_enable( cpu_self ); } else { - _ASR_Post_signals( signal_set, &asr->signals_pending ); _Thread_State_release( the_thread, &lock_context ); } |