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/include/rtems/posix/psignalimpl.h | |
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/include/rtems/posix/psignalimpl.h')
-rw-r--r-- | cpukit/posix/include/rtems/posix/psignalimpl.h | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/cpukit/posix/include/rtems/posix/psignalimpl.h b/cpukit/posix/include/rtems/posix/psignalimpl.h index 2dd1ed6739..c496fd33bd 100644 --- a/cpukit/posix/include/rtems/posix/psignalimpl.h +++ b/cpukit/posix/include/rtems/posix/psignalimpl.h @@ -32,6 +32,7 @@ #include <rtems/posix/pthread.h> #include <rtems/posix/sigset.h> #include <rtems/score/apiext.h> +#include <rtems/score/isrlock.h> #include <rtems/score/threadq.h> #define _States_Is_interruptible_signal( _states ) \ @@ -54,6 +55,8 @@ * Variables */ +extern ISR_lock_Control _POSIX_signals_Lock; + extern sigset_t _POSIX_signals_Pending; extern const struct sigaction _POSIX_signals_Default_vectors[ SIG_ARRAY_MAX ]; @@ -77,6 +80,12 @@ extern API_extensions_Post_switch_control _POSIX_signals_Post_switch; */ void _POSIX_signals_Manager_Initialization(void); +#define _POSIX_signals_Acquire( level ) \ + _ISR_lock_ISR_disable_and_acquire( &_POSIX_signals_Lock, level ) + +#define _POSIX_signals_Release( level ) \ + _ISR_lock_Release_and_ISR_enable( &_POSIX_signals_Lock, level ) + static inline void _POSIX_signals_Add_post_switch_extension(void) { _API_extensions_Add_post_switch( &_POSIX_signals_Post_switch ); @@ -110,7 +119,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 ); int killinfo( |