summaryrefslogtreecommitdiffstats
path: root/cpukit/score/src/threadwaitgetid.c
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2017-01-31 08:08:24 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2017-01-31 09:38:07 +0100
commite366f774a76d3607ad41dc0992e787ce38df980d (patch)
tree4ba5522aaa87021c60bcaf8d162af9b521b9268c /cpukit/score/src/threadwaitgetid.c
parentscore: Fix _Thread_Initialize() (diff)
downloadrtems-e366f774a76d3607ad41dc0992e787ce38df980d.tar.bz2
score: Add _Thread_queue_Object_name
Add the special thread queue name _Thread_queue_Object_name to mark thread queues embedded in an object with identifier. Using the special thread state STATES_THREAD_QUEUE_WITH_IDENTIFIER is not reliable for this purpose since the thread wait information and thread state are protected by different SMP locks in separate critical sections. Remove STATES_THREAD_QUEUE_WITH_IDENTIFIER. Add and use _Thread_queue_Object_initialize(). Update #2858.
Diffstat (limited to 'cpukit/score/src/threadwaitgetid.c')
-rw-r--r--cpukit/score/src/threadwaitgetid.c15
1 files changed, 7 insertions, 8 deletions
diff --git a/cpukit/score/src/threadwaitgetid.c b/cpukit/score/src/threadwaitgetid.c
index 9f17250353..fd32e5ec84 100644
--- a/cpukit/score/src/threadwaitgetid.c
+++ b/cpukit/score/src/threadwaitgetid.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2016, 2017 embedded brains GmbH. All rights reserved.
*
* embedded brains GmbH
* Dornierstr. 4
@@ -20,21 +20,20 @@
Objects_Id _Thread_Wait_get_id( const Thread_Control *the_thread )
{
- States_Control current_state;
-
- current_state = the_thread->current_state;
+ const Thread_queue_Queue *queue;
#if defined(RTEMS_MULTIPROCESSING)
- if ( ( current_state & STATES_WAITING_FOR_RPC_REPLY ) != 0 ) {
+ if ( _States_Is_waiting_for_rpc_reply( the_thread->current_state ) ) {
return the_thread->Wait.remote_id;
}
#endif
- if ( ( current_state & STATES_THREAD_QUEUE_WITH_IDENTIFIER ) != 0 ) {
- const Thread_queue_Object *queue_object;
+ queue = the_thread->Wait.queue;
- queue_object = THREAD_QUEUE_QUEUE_TO_OBJECT( the_thread->Wait.queue );
+ if ( queue != NULL && queue->name == _Thread_queue_Object_name ) {
+ const Thread_queue_Object *queue_object;
+ queue_object = THREAD_QUEUE_QUEUE_TO_OBJECT( queue );
return queue_object->Object.id;
}