summaryrefslogtreecommitdiffstats
path: root/cpukit/rtems
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2021-02-17 08:05:37 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2021-02-20 15:18:48 +0100
commitfea848bbbc8b63204677765cdcf8f5957e0ccf86 (patch)
tree76889a28a19ad7e90283c445f57b9d620e2963a1 /cpukit/rtems
parentvalidation: Add signal manager tests (diff)
downloadrtems-fea848bbbc8b63204677765cdcf8f5957e0ccf86.tar.bz2
score: Change thread action locking
Require that the corresponding lock is acquired before the action handler returns. This helps to avoid recursion in the signal processing. Update #4244.
Diffstat (limited to 'cpukit/rtems')
-rw-r--r--cpukit/rtems/src/signalcatch.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/cpukit/rtems/src/signalcatch.c b/cpukit/rtems/src/signalcatch.c
index c59e132ad3..2fd7c13374 100644
--- a/cpukit/rtems/src/signalcatch.c
+++ b/cpukit/rtems/src/signalcatch.c
@@ -51,12 +51,12 @@ void _Signal_Action_handler(
asr = &api->Signal;
signal_set = _ASR_Get_posted_signals( asr );
- _Thread_State_release( executing, lock_context );
-
if ( signal_set == 0 ) {
return;
}
+ _Thread_State_release( executing, lock_context );
+
asr->nest_level += 1;
rtems_task_mode( asr->mode_set, RTEMS_ALL_MODE_MASKS, &prev_mode );
@@ -64,6 +64,8 @@ void _Signal_Action_handler(
asr->nest_level -= 1;
rtems_task_mode( prev_mode, RTEMS_ALL_MODE_MASKS, &prev_mode );
+
+ _Thread_State_acquire( executing, lock_context );
}
rtems_status_code rtems_signal_catch(