From 5b6c290ed0fae8f9afd343c891e6d3650ef22492 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Thu, 1 Dec 2016 20:42:48 +0100 Subject: score: Initialize thread queue context early Initialize thread queue context early preferably outside the critical section. Remove implicit _Thread_queue_Context_initialize() from _Thread_Wait_acquire(). --- cpukit/rtems/src/schedulerremoveprocessor.c | 1 + cpukit/rtems/src/semcreate.c | 1 + cpukit/rtems/src/tasksetpriority.c | 2 +- 3 files changed, 3 insertions(+), 1 deletion(-) (limited to 'cpukit/rtems') diff --git a/cpukit/rtems/src/schedulerremoveprocessor.c b/cpukit/rtems/src/schedulerremoveprocessor.c index 21b7c4611e..86fd8e5265 100644 --- a/cpukit/rtems/src/schedulerremoveprocessor.c +++ b/cpukit/rtems/src/schedulerremoveprocessor.c @@ -41,6 +41,7 @@ static bool _Scheduler_Check_processor_removal( iter_context = arg; + _Thread_queue_Context_initialize( &queue_context ); _Thread_Wait_acquire( the_thread, &queue_context ); _Thread_State_acquire_critical( the_thread, &state_context ); diff --git a/cpukit/rtems/src/semcreate.c b/cpukit/rtems/src/semcreate.c index 10e64f4a01..77ee3d366d 100644 --- a/cpukit/rtems/src/semcreate.c +++ b/cpukit/rtems/src/semcreate.c @@ -168,6 +168,7 @@ rtems_status_code rtems_semaphore_create( Thread_queue_Context queue_context; _Thread_queue_Context_initialize( &queue_context ); + _Thread_queue_Context_clear_priority_updates( &queue_context ); _ISR_lock_ISR_disable( &queue_context.Lock_context.Lock_context ); _CORE_mutex_Acquire_critical( &the_semaphore->Core_control.Mutex.Recursive.Mutex, diff --git a/cpukit/rtems/src/tasksetpriority.c b/cpukit/rtems/src/tasksetpriority.c index 8f0ce31090..c17ff1cf7f 100644 --- a/cpukit/rtems/src/tasksetpriority.c +++ b/cpukit/rtems/src/tasksetpriority.c @@ -44,7 +44,6 @@ static rtems_status_code _RTEMS_tasks_Set_priority( return RTEMS_INVALID_PRIORITY; } - _Thread_queue_Context_clear_priority_updates( queue_context ); _Thread_Priority_change( the_thread, &the_thread->Real_priority, @@ -78,6 +77,7 @@ rtems_status_code rtems_task_set_priority( } _Thread_queue_Context_initialize( &queue_context ); + _Thread_queue_Context_clear_priority_updates( &queue_context ); the_thread = _Thread_Get( id, &queue_context.Lock_context.Lock_context ); if ( the_thread == NULL ) { -- cgit v1.2.3