summaryrefslogtreecommitdiffstats
path: root/cpukit/rtems/src/signalcatch.c
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2014-03-14 11:53:43 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2014-03-31 08:29:42 +0200
commit6fd1bdb7af578933f1aa8fb981a29c61df5dcde4 (patch)
treea89b37b37c4cbcb4d8c7a6478a4aa5b6ab279dde /cpukit/rtems/src/signalcatch.c
parentscore: Add thread actions (diff)
downloadrtems-6fd1bdb7af578933f1aa8fb981a29c61df5dcde4.tar.bz2
rtems: Use thread action for signals
Diffstat (limited to 'cpukit/rtems/src/signalcatch.c')
-rw-r--r--cpukit/rtems/src/signalcatch.c20
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;