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/taskmode.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 '')
-rw-r--r-- | cpukit/rtems/src/taskmode.c | 24 |
1 files changed, 11 insertions, 13 deletions
diff --git a/cpukit/rtems/src/taskmode.c b/cpukit/rtems/src/taskmode.c index cbf8c06a6b..24905368c3 100644 --- a/cpukit/rtems/src/taskmode.c +++ b/cpukit/rtems/src/taskmode.c @@ -21,7 +21,6 @@ #endif #include <rtems/rtems/tasksdata.h> -#include <rtems/rtems/asrimpl.h> #include <rtems/rtems/modesimpl.h> #include <rtems/rtems/signalimpl.h> #include <rtems/score/schedulerimpl.h> @@ -125,21 +124,20 @@ rtems_status_code rtems_task_mode( */ needs_asr_dispatching = false; if ( mask & RTEMS_ASR_MASK ) { - bool is_asr_enabled = !_Modes_Is_asr_disabled( mode_set ); + bool prev_asr_is_enabled; _Thread_State_acquire( executing, &lock_context ); - if ( is_asr_enabled != asr->is_enabled ) { - asr->is_enabled = is_asr_enabled; - - if ( _ASR_Swap_signals( asr ) != 0 ) { - needs_asr_dispatching = true; - _Thread_Add_post_switch_action( - executing, - &api->Signal_action, - _Signal_Action_handler - ); - } + prev_asr_is_enabled = asr->is_enabled; + asr->is_enabled = !_Modes_Is_asr_disabled( mode_set ); + + if ( + !prev_asr_is_enabled && + asr->is_enabled && + asr->signals_pending != 0 + ) { + needs_asr_dispatching = true; + _Thread_Append_post_switch_action( executing, &api->Signal_action ); } _Thread_State_release( executing, &lock_context ); |