From e366f774a76d3607ad41dc0992e787ce38df980d Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Tue, 31 Jan 2017 08:08:24 +0100 Subject: 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. --- cpukit/score/src/threadwaitgetid.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) (limited to 'cpukit/score/src/threadwaitgetid.c') 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; } -- cgit v1.2.3