diff options
Diffstat (limited to '')
-rw-r--r-- | cpukit/posix/include/rtems/posix/threadsup.h | 4 | ||||
-rw-r--r-- | cpukit/posix/src/killinfo.c | 6 | ||||
-rw-r--r-- | cpukit/posix/src/psignal.c | 2 | ||||
-rw-r--r-- | cpukit/posix/src/psignalchecksignal.c | 10 | ||||
-rw-r--r-- | cpukit/posix/src/psignalclearsignals.c | 10 | ||||
-rw-r--r-- | cpukit/posix/src/psignalunblockthread.c | 4 | ||||
-rw-r--r-- | cpukit/posix/src/pthread.c | 4 | ||||
-rw-r--r-- | cpukit/posix/src/pthreadsigmask.c | 10 |
8 files changed, 24 insertions, 26 deletions
diff --git a/cpukit/posix/include/rtems/posix/threadsup.h b/cpukit/posix/include/rtems/posix/threadsup.h index ae122962bc..bf80c6314a 100644 --- a/cpukit/posix/include/rtems/posix/threadsup.h +++ b/cpukit/posix/include/rtems/posix/threadsup.h @@ -63,8 +63,8 @@ typedef struct { */ Watchdog_Control Sporadic_timer; - /** This is the set of signals which are currently blocked. */ - sigset_t signals_blocked; + /** This is the set of signals which are currently unblocked. */ + sigset_t signals_unblocked; /** This is the set of signals which are currently pending. */ sigset_t signals_pending; diff --git a/cpukit/posix/src/killinfo.c b/cpukit/posix/src/killinfo.c index a90f4b1221..7f4adc738a 100644 --- a/cpukit/posix/src/killinfo.c +++ b/cpukit/posix/src/killinfo.c @@ -52,7 +52,7 @@ */ #define _POSIX_signals_Is_interested( _api, _mask ) \ - ( ~(_api)->signals_blocked & (_mask) ) + ( (_api)->signals_unblocked & (_mask) ) int killinfo( pid_t pid, @@ -153,7 +153,7 @@ int killinfo( #if defined(DEBUG_SIGNAL_PROCESSING) printk( "Waiting Thread=%p option=0x%08x mask=0x%08x blocked=0x%08x\n", - the_thread, the_thread->Wait.option, mask, api->signals_blocked); + the_thread, the_thread->Wait.option, mask, ~api->signals_unblocked); #endif /* @@ -166,7 +166,7 @@ int killinfo( * Is this thread is blocked waiting for another signal but has * not blocked this one? */ - if (~api->signals_blocked & mask) + if (api->signals_unblocked & mask) goto process_it; } } diff --git a/cpukit/posix/src/psignal.c b/cpukit/posix/src/psignal.c index d91a5bf7a2..f00bcdbb52 100644 --- a/cpukit/posix/src/psignal.c +++ b/cpukit/posix/src/psignal.c @@ -144,7 +144,7 @@ void _POSIX_signals_Action_handler( */ while (1) { _POSIX_signals_Acquire( &lock_context ); - if ( !(~api->signals_blocked & + if ( !(api->signals_unblocked & (api->signals_pending | _POSIX_signals_Pending)) ) { _POSIX_signals_Release( &lock_context ); break; diff --git a/cpukit/posix/src/psignalchecksignal.c b/cpukit/posix/src/psignalchecksignal.c index 2f9fe10a5a..990bcc2c34 100644 --- a/cpukit/posix/src/psignalchecksignal.c +++ b/cpukit/posix/src/psignalchecksignal.c @@ -43,7 +43,7 @@ bool _POSIX_signals_Check_signal( ) { siginfo_t siginfo_struct; - sigset_t saved_signals_blocked; + sigset_t saved_signals_unblocked; Thread_Wait_information stored_thread_wait_information; Thread_Control *executing; @@ -69,8 +69,8 @@ bool _POSIX_signals_Check_signal( /* * Block the signals requested in sa_mask */ - saved_signals_blocked = api->signals_blocked; - api->signals_blocked |= _POSIX_signals_Vectors[ signo ].sa_mask; + saved_signals_unblocked = api->signals_unblocked; + api->signals_unblocked &= ~_POSIX_signals_Vectors[ signo ].sa_mask; executing = _Thread_Get_executing(); @@ -105,9 +105,9 @@ bool _POSIX_signals_Check_signal( sizeof( executing->Wait )); /* - * Restore the previous set of blocked signals + * Restore the previous set of unblocked signals */ - api->signals_blocked = saved_signals_blocked; + api->signals_unblocked = saved_signals_unblocked; return true; } diff --git a/cpukit/posix/src/psignalclearsignals.c b/cpukit/posix/src/psignalclearsignals.c index 18bdea5d18..c7852554e5 100644 --- a/cpukit/posix/src/psignalclearsignals.c +++ b/cpukit/posix/src/psignalclearsignals.c @@ -46,7 +46,7 @@ bool _POSIX_signals_Clear_signals( ) { sigset_t mask; - sigset_t signals_blocked; + sigset_t signals_unblocked; ISR_lock_Context lock_context; bool do_callout; POSIX_signals_Siginfo_node *psiginfo; @@ -60,9 +60,9 @@ bool _POSIX_signals_Clear_signals( */ if ( check_blocked ) - signals_blocked = ~api->signals_blocked; + signals_unblocked = api->signals_unblocked; else - signals_blocked = SIGNAL_ALL_MASK; + signals_unblocked = SIGNAL_ALL_MASK; /* XXX is this right for siginfo type signals? */ /* XXX are we sure they can be cleared the same way? */ @@ -72,7 +72,7 @@ bool _POSIX_signals_Clear_signals( } if ( is_global ) { - if ( mask & (_POSIX_signals_Pending & signals_blocked) ) { + if ( mask & (_POSIX_signals_Pending & signals_unblocked) ) { if ( _POSIX_signals_Vectors[ signo ].sa_flags == SA_SIGINFO ) { psiginfo = (POSIX_signals_Siginfo_node *) _Chain_Get_unprotected( &_POSIX_signals_Siginfo[ signo ] ); @@ -95,7 +95,7 @@ bool _POSIX_signals_Clear_signals( do_callout = true; } } else { - if ( mask & (api->signals_pending & signals_blocked) ) { + if ( mask & (api->signals_pending & signals_unblocked) ) { api->signals_pending &= ~mask; do_callout = true; } diff --git a/cpukit/posix/src/psignalunblockthread.c b/cpukit/posix/src/psignalunblockthread.c index ff5a8fa041..640c758bf3 100644 --- a/cpukit/posix/src/psignalunblockthread.c +++ b/cpukit/posix/src/psignalunblockthread.c @@ -69,7 +69,7 @@ bool _POSIX_signals_Unblock_thread( if ( _States_Is_interruptible_signal( the_thread->current_state ) ) { - if ( (the_thread->Wait.option & mask) || (~api->signals_blocked & mask) ) { + if ( (the_thread->Wait.option & mask) || (api->signals_unblocked & mask) ) { the_thread->Wait.return_code = EINTR; the_info = (siginfo_t *) the_thread->Wait.return_argument; @@ -96,7 +96,7 @@ bool _POSIX_signals_Unblock_thread( /* * Thread is not waiting due to a sigwait. */ - if ( ~api->signals_blocked & mask ) { + if ( api->signals_unblocked & mask ) { /* * The thread is interested in this signal. We are going diff --git a/cpukit/posix/src/pthread.c b/cpukit/posix/src/pthread.c index b8721f9f3c..ee7da11231 100644 --- a/cpukit/posix/src/pthread.c +++ b/cpukit/posix/src/pthread.c @@ -222,9 +222,7 @@ static bool _POSIX_Threads_Create_extension( #endif ) { executing_api = _Thread_Get_executing()->API_Extensions[ THREAD_API_POSIX ]; - api->signals_blocked = executing_api->signals_blocked; - } else { - api->signals_blocked = SIGNAL_ALL_MASK; + api->signals_unblocked = executing_api->signals_unblocked; } _Thread_queue_Initialize( &api->Join_List, THREAD_QUEUE_DISCIPLINE_FIFO ); diff --git a/cpukit/posix/src/pthreadsigmask.c b/cpukit/posix/src/pthreadsigmask.c index 7c2d99c3ef..908ffd010f 100644 --- a/cpukit/posix/src/pthreadsigmask.c +++ b/cpukit/posix/src/pthreadsigmask.c @@ -45,20 +45,20 @@ int pthread_sigmask( api = _Thread_Get_executing()->API_Extensions[ THREAD_API_POSIX ]; if ( oset ) - *oset = api->signals_blocked; + *oset = ~api->signals_unblocked; if ( !set ) return 0; switch ( how ) { case SIG_BLOCK: - api->signals_blocked |= *set; + api->signals_unblocked &= ~*set; break; case SIG_UNBLOCK: - api->signals_blocked &= ~*set; + api->signals_unblocked |= *set; break; case SIG_SETMASK: - api->signals_blocked = *set; + api->signals_unblocked = ~*set; break; default: rtems_set_errno_and_return_minus_one( EINVAL ); @@ -68,7 +68,7 @@ int pthread_sigmask( /* XXX evaluate the new set */ - if ( ~api->signals_blocked & + if ( api->signals_unblocked & (api->signals_pending | _POSIX_signals_Pending) ) { _Thread_Dispatch(); } |