summaryrefslogtreecommitdiffstats
path: root/cpukit/rtems/src/signalcatch.c
diff options
context:
space:
mode:
Diffstat (limited to 'cpukit/rtems/src/signalcatch.c')
-rw-r--r--cpukit/rtems/src/signalcatch.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/cpukit/rtems/src/signalcatch.c b/cpukit/rtems/src/signalcatch.c
index e4ff15fd40..8ee22e5ec1 100644
--- a/cpukit/rtems/src/signalcatch.c
+++ b/cpukit/rtems/src/signalcatch.c
@@ -22,7 +22,6 @@
#endif
#include <rtems/rtems/signalimpl.h>
-#include <rtems/rtems/asrimpl.h>
#include <rtems/rtems/tasksdata.h>
#include <rtems/score/threadimpl.h>
@@ -41,12 +40,19 @@ rtems_status_code rtems_signal_catch(
executing = _Thread_State_acquire_for_executing( &lock_context );
api = executing->API_Extensions[ THREAD_API_RTEMS ];
asr = &api->Signal;
+ asr->handler = asr_handler;
+ asr->mode_set = mode_set;
- if ( asr_handler != NULL ) {
- asr->mode_set = mode_set;
- asr->handler = asr_handler;
- } else {
- _ASR_Initialize( asr );
+ if ( asr_handler == NULL ) {
+ Chain_Node *node;
+
+ asr->signals_pending = 0;
+ node = &api->Signal_action.Node;
+
+ if ( !_Chain_Is_node_off_chain( node ) ) {
+ _Chain_Extract_unprotected( node );
+ _Chain_Set_off_chain( node );
+ }
}
_Thread_State_release( executing, &lock_context );