diff options
Diffstat (limited to 'cpukit/posix')
-rw-r--r-- | cpukit/posix/src/psignalunblockthread.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/cpukit/posix/src/psignalunblockthread.c b/cpukit/posix/src/psignalunblockthread.c index de814c13cd..1133234554 100644 --- a/cpukit/posix/src/psignalunblockthread.c +++ b/cpukit/posix/src/psignalunblockthread.c @@ -175,6 +175,15 @@ static bool _POSIX_signals_Unblock_thread_done( return status; } +static void _POSIX_signals_Interrupt_thread( Thread_Control *the_thread ) +{ +#if defined(RTEMS_MULTIPROCESSING) + _Thread_MP_Extract_proxy( the_thread ); +#endif + the_thread->Wait.return_code = STATUS_INTERRUPTED; + _Thread_queue_Extract( the_thread ); +} + bool _POSIX_signals_Unblock_thread( Thread_Control *the_thread, int signo, @@ -196,8 +205,6 @@ bool _POSIX_signals_Unblock_thread( if ( _States_Is_interruptible_signal( the_thread->current_state ) ) { if ( (the_thread->Wait.option & mask) || (api->signals_unblocked & mask) ) { - the_thread->Wait.return_code = STATUS_INTERRUPTED; - the_info = (siginfo_t *) the_thread->Wait.return_argument; if ( !info ) { @@ -208,7 +215,7 @@ bool _POSIX_signals_Unblock_thread( *the_info = *info; } - _Thread_queue_Extract_with_proxy( the_thread ); + _POSIX_signals_Interrupt_thread( the_thread ); return _POSIX_signals_Unblock_thread_done( the_thread, api, true ); } @@ -238,8 +245,7 @@ bool _POSIX_signals_Unblock_thread( */ if ( _States_Is_interruptible_by_signal( the_thread->current_state ) ) { - the_thread->Wait.return_code = STATUS_INTERRUPTED; - _Thread_queue_Extract_with_proxy( the_thread ); + _POSIX_signals_Interrupt_thread( the_thread ); } } return _POSIX_signals_Unblock_thread_done( the_thread, api, false ); |