summaryrefslogtreecommitdiffstats
path: root/cpukit/posix/src/psignalclearsignals.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/psignalclearsignals.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 'cpukit/posix/src/psignalclearsignals.c')
-rw-r--r--cpukit/posix/src/psignalclearsignals.c14
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;
}