forked from Imagelibrary/rtems
2006-11-15 Joel Sherrill <joel.sherrill@oarcorp.com>
* score/inline/rtems/score/threadq.inl, score/src/corerwlocktimeout.c: New files.
This commit is contained in:
@@ -1,3 +1,8 @@
|
||||
2006-11-15 Joel Sherrill <joel.sherrill@oarcorp.com>
|
||||
|
||||
* score/inline/rtems/score/threadq.inl, score/src/corerwlocktimeout.c:
|
||||
New files.
|
||||
|
||||
2006-11-15 Joel Sherrill <joel.sherrill@oarcorp.com>
|
||||
|
||||
* libcsupport/src/termios.c, posix/Makefile.am, posix/preinstall.am,
|
||||
|
||||
71
cpukit/score/inline/rtems/score/threadq.inl
Normal file
71
cpukit/score/inline/rtems/score/threadq.inl
Normal file
@@ -0,0 +1,71 @@
|
||||
/**
|
||||
* @file rtems/score/threadq.inl
|
||||
*
|
||||
* This inline file contains all of the inlined routines associated with
|
||||
* the manipulation of thread queues.
|
||||
*/
|
||||
|
||||
/*
|
||||
* COPYRIGHT (c) 1989-2006.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.rtems.com/license/LICENSE.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#ifndef _RTEMS_SCORE_THREADQ_INL
|
||||
#define _RTEMS_SCORE_THREADQ_INL
|
||||
|
||||
#include <rtems/score/thread.h>
|
||||
|
||||
/**
|
||||
* @addtogroup ScoreThreadQ
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
*
|
||||
* @brief Process Thread Queue Timeout
|
||||
*
|
||||
* This is a shared helper routine which makes it easier to have multiple
|
||||
* object class specific timeout routines.
|
||||
*
|
||||
* @param[in] the_thread is the thread to extract
|
||||
*
|
||||
* @note Assume Dispatching is disabled.
|
||||
*/
|
||||
static inline void _Thread_queue_Process_timeout(
|
||||
Thread_Control *the_thread
|
||||
)
|
||||
{
|
||||
Thread_queue_Control *the_thread_queue = the_thread->Wait.queue;
|
||||
|
||||
/*
|
||||
* If the_thread_queue is not synchronized, then it is either
|
||||
* "nothing happened", "timeout", or "satisfied". If the_thread
|
||||
* is the executing thread, then it is in the process of blocking
|
||||
* and it is the thread which is responsible for the synchronization
|
||||
* process.
|
||||
*
|
||||
* If it is not satisfied, then it is "nothing happened" and
|
||||
* this is the "timeout" transition. After a request is satisfied,
|
||||
* a timeout is not allowed to occur.
|
||||
*/
|
||||
|
||||
if ( the_thread_queue->sync_state != THREAD_QUEUE_SYNCHRONIZED &&
|
||||
_Thread_Is_executing( the_thread ) ) {
|
||||
if ( the_thread_queue->sync_state != THREAD_QUEUE_SATISFIED )
|
||||
the_thread_queue->sync_state = THREAD_QUEUE_TIMEOUT;
|
||||
} else {
|
||||
the_thread->Wait.return_code = the_thread->Wait.queue->timeout_status;
|
||||
_Thread_queue_Extract( the_thread->Wait.queue, the_thread );
|
||||
}
|
||||
}
|
||||
|
||||
/**@}*/
|
||||
|
||||
#endif
|
||||
/* end of include file */
|
||||
53
cpukit/score/src/corerwlocktimeout.c
Normal file
53
cpukit/score/src/corerwlocktimeout.c
Normal file
@@ -0,0 +1,53 @@
|
||||
/*
|
||||
* Thread Queue Handler
|
||||
*
|
||||
*
|
||||
* COPYRIGHT (c) 1989-1999.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.rtems.com/license/LICENSE.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <rtems/system.h>
|
||||
#include <rtems/score/corerwlock.h>
|
||||
#include <rtems/score/corerwlock.h>
|
||||
|
||||
/*
|
||||
* _CORE_RWLock_Timeout
|
||||
*
|
||||
* This routine processes a thread which timeouts while waiting on
|
||||
* a thread queue. It is called by the watchdog handler.
|
||||
*
|
||||
* Input parameters:
|
||||
* id - thread id
|
||||
*
|
||||
* Output parameters: NONE
|
||||
*/
|
||||
|
||||
void _CORE_RWLock_Timeout(
|
||||
Objects_Id id,
|
||||
void *ignored
|
||||
)
|
||||
{
|
||||
Thread_Control *the_thread;
|
||||
Objects_Locations location;
|
||||
|
||||
the_thread = _Thread_Get( id, &location );
|
||||
switch ( location ) {
|
||||
case OBJECTS_ERROR:
|
||||
case OBJECTS_REMOTE: /* impossible */
|
||||
break;
|
||||
case OBJECTS_LOCAL:
|
||||
_Thread_queue_Process_timeout( the_thread );
|
||||
_Thread_Unnest_dispatch();
|
||||
break;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user