diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2014-03-14 11:53:43 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2014-03-31 08:29:42 +0200 |
commit | 6fd1bdb7af578933f1aa8fb981a29c61df5dcde4 (patch) | |
tree | a89b37b37c4cbcb4d8c7a6478a4aa5b6ab279dde /cpukit/rtems/src/signalcatch.c | |
parent | score: Add thread actions (diff) | |
download | rtems-6fd1bdb7af578933f1aa8fb981a29c61df5dcde4.tar.bz2 |
rtems: Use thread action for signals
Diffstat (limited to 'cpukit/rtems/src/signalcatch.c')
-rw-r--r-- | cpukit/rtems/src/signalcatch.c | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/cpukit/rtems/src/signalcatch.c b/cpukit/rtems/src/signalcatch.c index 67c78b55c7..1bbeea727f 100644 --- a/cpukit/rtems/src/signalcatch.c +++ b/cpukit/rtems/src/signalcatch.c @@ -18,20 +18,29 @@ #include "config.h" #endif -#include <rtems/rtems/signal.h> +#include <rtems/rtems/signalimpl.h> #include <rtems/rtems/asrimpl.h> #include <rtems/rtems/tasks.h> #include <rtems/score/apiext.h> #include <rtems/score/isrlevel.h> #include <rtems/score/threaddispatch.h> +#include <rtems/score/threadimpl.h> -static void _RTEMS_signal_Post_switch_hook( Thread_Control *executing ) +void _Signal_Action_handler( + Thread_Control *executing, + Thread_Action *action, + Per_CPU_Control *cpu, + ISR_Level level +) { RTEMS_API_Control *api; ASR_Information *asr; rtems_signal_set signal_set; Modes_Control prev_mode; + (void) action; + _Thread_Action_release_and_ISR_enable( cpu, level ); + api = executing->API_Extensions[ THREAD_API_RTEMS ]; if ( !api ) return; @@ -53,13 +62,8 @@ static void _RTEMS_signal_Post_switch_hook( Thread_Control *executing ) asr->nest_level -= 1; rtems_task_mode( prev_mode, RTEMS_ALL_MODE_MASKS, &prev_mode ); - } -static API_extensions_Post_switch_control _RTEMS_signal_Post_switch = { - .hook = _RTEMS_signal_Post_switch_hook -}; - rtems_status_code rtems_signal_catch( rtems_asr_entry asr_handler, rtems_mode mode_set @@ -76,8 +80,6 @@ rtems_status_code rtems_signal_catch( _Thread_Disable_dispatch(); /* cannot reschedule while */ /* the thread is inconsistent */ - _API_extensions_Add_post_switch( &_RTEMS_signal_Post_switch ); - if ( !_ASR_Is_null_handler( asr_handler ) ) { asr->mode_set = mode_set; asr->handler = asr_handler; |