summaryrefslogtreecommitdiffstats
path: root/cpukit/posix/src/psignal.c
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2013-08-26 17:39:00 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2013-08-27 12:51:46 +0200
commit7d9fff6e283e4adb114dee487a56f6e55a393a9e (patch)
tree8e87cc80bce58f41d2b4a37cd24ef3ddcbfeec17 /cpukit/posix/src/psignal.c
parentscore: Add SMP support to _Watchdog_Report_chain() (diff)
downloadrtems-7d9fff6e283e4adb114dee487a56f6e55a393a9e.tar.bz2
posix: Add and use _POSIX_signals_Acquire()
Add and use _POSIX_signals_Release(). The post-switch handler is not protected by disabled thread dispatching. Use proper SMP lock for signal management.
Diffstat (limited to '')
-rw-r--r--cpukit/posix/src/psignal.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/cpukit/posix/src/psignal.c b/cpukit/posix/src/psignal.c
index 1778cece17..5258b2bf9e 100644
--- a/cpukit/posix/src/psignal.c
+++ b/cpukit/posix/src/psignal.c
@@ -45,6 +45,8 @@ RTEMS_STATIC_ASSERT(
/*** PROCESS WIDE STUFF ****/
+ISR_lock_Control _POSIX_signals_Lock = ISR_LOCK_INITIALIZER;
+
sigset_t _POSIX_signals_Pending;
void _POSIX_signals_Abnormal_termination_handler(
@@ -144,13 +146,13 @@ static void _POSIX_signals_Post_switch_hook(
* processed at all. No point in doing this loop otherwise.
*/
while (1) {
- _ISR_Disable( level );
+ _POSIX_signals_Acquire( level );
if ( !(~api->signals_blocked &
(api->signals_pending | _POSIX_signals_Pending)) ) {
- _ISR_Enable( level );
+ _POSIX_signals_Release( level );
break;
}
- _ISR_Enable( level );
+ _POSIX_signals_Release( level );
for ( signo = SIGRTMIN ; signo <= SIGRTMAX ; signo++ ) {
_POSIX_signals_Check_signal( api, signo, false );