diff options
Diffstat (limited to 'cpukit/score/src/threadqfirst.c')
-rw-r--r-- | cpukit/score/src/threadqfirst.c | 28 |
1 files changed, 6 insertions, 22 deletions
diff --git a/cpukit/score/src/threadqfirst.c b/cpukit/score/src/threadqfirst.c index 5d97ae156d..c46f005c3e 100644 --- a/cpukit/score/src/threadqfirst.c +++ b/cpukit/score/src/threadqfirst.c @@ -19,33 +19,17 @@ #endif #include <rtems/score/threadqimpl.h> -#include <rtems/score/chainimpl.h> -#include <rtems/score/isrlevel.h> -#include <rtems/score/threadimpl.h> Thread_Control *_Thread_queue_First( Thread_queue_Control *the_thread_queue ) { - ISR_Level level; - Thread_Control *thread; + Thread_Control *the_thread; + ISR_lock_Context lock_context; - thread = NULL; + _Thread_queue_Acquire( the_thread_queue, &lock_context ); + the_thread = _Thread_queue_First_locked( the_thread_queue ); + _Thread_queue_Release( the_thread_queue, &lock_context ); - _ISR_Disable( level ); - - if ( the_thread_queue->discipline == THREAD_QUEUE_DISCIPLINE_FIFO ) { - if ( !_Chain_Is_empty( &the_thread_queue->Queues.Fifo ) ) - thread = (Thread_Control *) _Chain_First(&the_thread_queue->Queues.Fifo); - } else { /* must be THREAD_QUEUE_DISCIPLINE_PRIORITY */ - RBTree_Node *first; - - first = _RBTree_First( &the_thread_queue->Queues.Priority, RBT_LEFT ); - if ( first ) - thread = THREAD_RBTREE_NODE_TO_THREAD( first ); - } - - _ISR_Enable( level ); - - return thread; + return the_thread; } |