From 50aef135a405a0dc26c39d7cfe7066f85b3dfbb5 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Thu, 11 Nov 2021 08:35:22 +0100 Subject: score: Add _Thread_MP_Extract_proxy() Remove _Thread_queue_Extract_with_proxy() and move the proxy extraction to _Thread_MP_Extract_proxy(). Move similar code blocks of the previous caller of _Thread_queue_Extract_with_proxy() to helper functions. Update #4546. --- cpukit/posix/src/psignalunblockthread.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) (limited to 'cpukit/posix') 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 ); -- cgit v1.2.3