source: rtems/cpukit/score/src/threadqextractfifo.c @ b72e847b

4.8
Last change on this file since b72e847b was 96d0b64, checked in by Joel Sherrill <joel.sherrill@…>, on 03/05/07 at 21:01:40

2007-03-05 Joel Sherrill <joel@…>

PR 1222/cpukit

  • score/Makefile.am, score/include/rtems/score/coremutex.h, score/include/rtems/score/threadq.h, score/inline/rtems/score/coremutex.inl, score/src/coremsgsubmit.c, score/src/coremutexsurrender.c, score/src/threadchangepriority.c, score/src/threadclearstate.c, score/src/threadhandler.c, score/src/threadinitialize.c, score/src/threadqdequeuefifo.c, score/src/threadqdequeuepriority.c, score/src/threadqenqueue.c, score/src/threadqenqueuefifo.c, score/src/threadqenqueuepriority.c, score/src/threadqextractfifo.c, score/src/threadqextractpriority.c, score/src/threadsetstate.c: Enhance so that when the prioirity of a thread that is blocked on a priority based thread queue is changed, that its placement in the queue is reevaluated based upon the new priority. This enhancement includes modifications to the SuperCore? as well as new test cases.
  • score/src/threadqrequeue.c: New file.
  • Property mode set to 100644
File size: 1.7 KB
Line 
1/*
2 *  Thread Queue Handler
3 *
4 *
5 *  COPYRIGHT (c) 1989-2006.
6 *  On-Line Applications Research Corporation (OAR).
7 *
8 *  The license and distribution terms for this file may be
9 *  found in the file LICENSE in this distribution or at
10 *  http://www.rtems.com/license/LICENSE.
11 *
12 *  $Id$
13 */
14
15#if HAVE_CONFIG_H
16#include "config.h"
17#endif
18
19#include <rtems/system.h>
20#include <rtems/score/chain.h>
21#include <rtems/score/isr.h>
22#include <rtems/score/object.h>
23#include <rtems/score/states.h>
24#include <rtems/score/thread.h>
25#include <rtems/score/threadq.h>
26#include <rtems/score/tqdata.h>
27
28/*PAGE
29 *
30 *  _Thread_queue_Extract_fifo
31 *
32 *  This routine removes a specific thread from the specified threadq,
33 *  deletes any timeout, and unblocks the thread.
34 *
35 *  Input parameters:
36 *    the_thread_queue - pointer to a threadq header
37 *    the_thread       - pointer to the thread to block
38 *
39 *  Output parameters: NONE
40 *
41 *  INTERRUPT LATENCY:
42 *    EXTRACT_FIFO
43 */
44
45void _Thread_queue_Extract_fifo(
46  Thread_queue_Control *the_thread_queue,
47  Thread_Control       *the_thread
48)
49{
50  ISR_Level level;
51
52  _ISR_Disable( level );
53
54  if ( !_States_Is_waiting_on_thread_queue( the_thread->current_state ) ) {
55    _ISR_Enable( level );
56    return;
57  }
58
59  _Chain_Extract_unprotected( &the_thread->Object.Node );
60
61  the_thread->Wait.queue = NULL;
62
63  if ( !_Watchdog_Is_active( &the_thread->Timer ) ) {
64    _ISR_Enable( level );
65  } else {
66    _Watchdog_Deactivate( &the_thread->Timer );
67    _ISR_Enable( level );
68    (void) _Watchdog_Remove( &the_thread->Timer );
69  }
70
71  _Thread_Unblock( the_thread );
72
73#if defined(RTEMS_MULTIPROCESSING)
74  if ( !_Objects_Is_local_id( the_thread->Object.id ) )
75    _Thread_MP_Free_proxy( the_thread );
76#endif
77
78}
Note: See TracBrowser for help on using the repository browser.