summaryrefslogtreecommitdiffstats
path: root/cpukit/posix/src
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2021-11-11 08:35:22 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2021-11-23 11:00:28 +0100
commit50aef135a405a0dc26c39d7cfe7066f85b3dfbb5 (patch)
tree772b2944bdbd60ee514f04d78b5471fdbd71d480 /cpukit/posix/src
parentscore: Remove thread timer earlier (diff)
downloadrtems-50aef135a405a0dc26c39d7cfe7066f85b3dfbb5.tar.bz2
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.
Diffstat (limited to 'cpukit/posix/src')
-rw-r--r--cpukit/posix/src/psignalunblockthread.c16
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 );