diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2013-08-26 17:39:00 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2013-08-27 12:51:46 +0200 |
commit | 7d9fff6e283e4adb114dee487a56f6e55a393a9e (patch) | |
tree | 8e87cc80bce58f41d2b4a37cd24ef3ddcbfeec17 /cpukit/posix/src/psignal.c | |
parent | score: Add SMP support to _Watchdog_Report_chain() (diff) | |
download | rtems-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 'cpukit/posix/src/psignal.c')
-rw-r--r-- | cpukit/posix/src/psignal.c | 8 |
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 ); |