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/psignalclearsignals.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 '')
-rw-r--r-- | cpukit/posix/src/psignalclearsignals.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/cpukit/posix/src/psignalclearsignals.c b/cpukit/posix/src/psignalclearsignals.c index 389c3352bd..88de41c788 100644 --- a/cpukit/posix/src/psignalclearsignals.c +++ b/cpukit/posix/src/psignalclearsignals.c @@ -42,7 +42,8 @@ bool _POSIX_signals_Clear_signals( int signo, siginfo_t *info, bool is_global, - bool check_blocked + bool check_blocked, + bool do_signals_acquire_release ) { sigset_t mask; @@ -67,7 +68,10 @@ bool _POSIX_signals_Clear_signals( /* XXX is this right for siginfo type signals? */ /* XXX are we sure they can be cleared the same way? */ - _ISR_Disable( level ); + if ( do_signals_acquire_release ) { + _POSIX_signals_Acquire( level ); + } + if ( is_global ) { if ( mask & (_POSIX_signals_Pending & signals_blocked) ) { if ( _POSIX_signals_Vectors[ signo ].sa_flags == SA_SIGINFO ) { @@ -97,6 +101,10 @@ bool _POSIX_signals_Clear_signals( do_callout = true; } } - _ISR_Enable( level ); + + if ( do_signals_acquire_release ) { + _POSIX_signals_Release( level ); + } + return do_callout; } |