diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2017-01-31 08:08:24 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2017-01-31 09:38:07 +0100 |
commit | e366f774a76d3607ad41dc0992e787ce38df980d (patch) | |
tree | 4ba5522aaa87021c60bcaf8d162af9b521b9268c /cpukit/score/src/threadwaitgetid.c | |
parent | score: Fix _Thread_Initialize() (diff) | |
download | rtems-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.c | 15 |
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; } |