[rtems commit] score: Delete _CORE_RWLock_Timeout()
Joel Sherrill
joel.sherrill at oarcorp.com
Wed Apr 22 13:01:13 UTC 2015
Please add a comment to the group in Doxygen to see this commit for getting this back. If POSIX or another standard ever requires reevaluation of the lock and released threads on a timeout.
POSIX is very loose on the discipline of waiting threads and behavior on timeout. It leaves a lot of room for variation. I picked the way we are doing because it was simple and made sense to honor readers and writers in temporal order.
This was a hole to add rwlock unique timeout behavior that could vary by API.
On April 22, 2015 7:23:20 AM CDT, Sebastian Huber <sebh at rtems.org> wrote:
>Module: rtems
>Branch: master
>Commit: b0686b473d8c07e5bbdc1932d7d9b71bfccdf92e
>Changeset:
>http://git.rtems.org/rtems/commit/?id=b0686b473d8c07e5bbdc1932d7d9b71bfccdf92e
>
>Author: Sebastian Huber <sebastian.huber at embedded-brains.de>
>Date: Wed Apr 22 13:57:18 2015 +0200
>
>score: Delete _CORE_RWLock_Timeout()
>
>This function was identical to _Thread_queue_Timeout(). This makes
>_Thread_queue_Enqueue_with_handler() obsolete.
>
>---
>
> cpukit/score/Makefile.am | 2 +-
> cpukit/score/include/rtems/score/corerwlockimpl.h | 15 --------
> cpukit/score/include/rtems/score/threadqimpl.h | 22 ++---------
> cpukit/score/src/corerwlockobtainread.c | 5 +--
> cpukit/score/src/corerwlockobtainwrite.c | 6 +--
>cpukit/score/src/corerwlocktimeout.c | 45
>-----------------------
> cpukit/score/src/threadqenqueue.c | 11 +++---
> 7 files changed, 14 insertions(+), 92 deletions(-)
>
>diff --git a/cpukit/score/Makefile.am b/cpukit/score/Makefile.am
>index 0a6beb4..f8ad60d 100644
>--- a/cpukit/score/Makefile.am
>+++ b/cpukit/score/Makefile.am
>@@ -174,7 +174,7 @@ libscore_a_SOURCES += src/percpuasm.c
> ## CORE_RWLOCK_C_FILES
> if HAS_PTHREADS
> libscore_a_SOURCES += src/corerwlock.c src/corerwlockobtainread.c \
>- src/corerwlockobtainwrite.c src/corerwlockrelease.c
>src/corerwlocktimeout.c
>+ src/corerwlockobtainwrite.c src/corerwlockrelease.c
> endif
>
> ## CORE_SEMAPHORE_C_FILES
>diff --git a/cpukit/score/include/rtems/score/corerwlockimpl.h
>b/cpukit/score/include/rtems/score/corerwlockimpl.h
>index 66c3b1a..331510b 100644
>--- a/cpukit/score/include/rtems/score/corerwlockimpl.h
>+++ b/cpukit/score/include/rtems/score/corerwlockimpl.h
>@@ -168,21 +168,6 @@ CORE_RWLock_Status _CORE_RWLock_Release(
> )
>
> /**
>- * @brief RWLock specific thread queue timeout.
>- *
>- * This routine processes a thread which timeouts while waiting on
>- * an RWLock's thread queue. It is called by the watchdog handler.
>- *
>- * @param[in] id is the Id of thread to timeout
>- * @param[in] ignored is an unused pointer to a caller defined area
>- */
>-
>-void _CORE_RWLock_Timeout(
>- Objects_Id id,
>- void *ignored
>-);
>-
>-/**
> * This method is used to initialize core rwlock attributes.
> *
> * @param[in] the_attributes pointer to the attributes to initialize.
>diff --git a/cpukit/score/include/rtems/score/threadqimpl.h
>b/cpukit/score/include/rtems/score/threadqimpl.h
>index 2fa7974..57bdf05 100644
>--- a/cpukit/score/include/rtems/score/threadqimpl.h
>+++ b/cpukit/score/include/rtems/score/threadqimpl.h
>@@ -64,19 +64,6 @@ Thread_Control *_Thread_queue_Dequeue(
> );
>
> /**
>- * @brief Enqueues the currently executing thread on
>the_thread_queue.
>- *
>- * This routine enqueues the currently executing thread on
>- * the_thread_queue with an optional timeout.
>- */
>-#define _Thread_queue_Enqueue( _the_thread_queue, _the_thread,
>_timeout ) \
>- _Thread_queue_Enqueue_with_handler( \
>- _the_thread_queue, \
>- _the_thread, \
>- _timeout, \
>- _Thread_queue_Timeout )
>-
>-/**
> * @brief Blocks a thread and places it on a thread.
> *
> * This routine blocks a thread, places it on a thread, and optionally
>@@ -89,11 +76,10 @@ Thread_Control *_Thread_queue_Dequeue(
> * - INTERRUPT LATENCY:
> * + single case
> */
>-void _Thread_queue_Enqueue_with_handler(
>- Thread_queue_Control *the_thread_queue,
>- Thread_Control *the_thread,
>- Watchdog_Interval timeout,
>- Thread_queue_Timeout_callout handler
>+void _Thread_queue_Enqueue(
>+ Thread_queue_Control *the_thread_queue,
>+ Thread_Control *the_thread,
>+ Watchdog_Interval timeout
> );
>
> /**
>diff --git a/cpukit/score/src/corerwlockobtainread.c
>b/cpukit/score/src/corerwlockobtainread.c
>index c118e29..f3851b4 100644
>--- a/cpukit/score/src/corerwlockobtainread.c
>+++ b/cpukit/score/src/corerwlockobtainread.c
>@@ -84,11 +84,10 @@ void _CORE_RWLock_Obtain_for_reading(
> executing->Wait.return_code = CORE_RWLOCK_SUCCESSFUL;
> _ISR_Enable( level );
>
>- _Thread_queue_Enqueue_with_handler(
>+ _Thread_queue_Enqueue(
> &the_rwlock->Wait_queue,
> executing,
>- timeout,
>- _CORE_RWLock_Timeout
>+ timeout
> );
>
> /* return to API level so it can dispatch and we block */
>diff --git a/cpukit/score/src/corerwlockobtainwrite.c
>b/cpukit/score/src/corerwlockobtainwrite.c
>index 40da6c9..ea7d25c 100644
>--- a/cpukit/score/src/corerwlockobtainwrite.c
>+++ b/cpukit/score/src/corerwlockobtainwrite.c
>@@ -74,13 +74,11 @@ void _CORE_RWLock_Obtain_for_writing(
> executing->Wait.return_code = CORE_RWLOCK_SUCCESSFUL;
> _ISR_Enable( level );
>
>- _Thread_queue_Enqueue_with_handler(
>+ _Thread_queue_Enqueue(
> &the_rwlock->Wait_queue,
> executing,
>- timeout,
>- _CORE_RWLock_Timeout
>+ timeout
> );
>
>-
> /* return to API level so it can dispatch and we block */
> }
>diff --git a/cpukit/score/src/corerwlocktimeout.c
>b/cpukit/score/src/corerwlocktimeout.c
>deleted file mode 100644
>index 2e4b03f..0000000
>--- a/cpukit/score/src/corerwlocktimeout.c
>+++ /dev/null
>@@ -1,45 +0,0 @@
>-/**
>- * @file
>- *
>- * @brief RWLock Specific Thread Queue Timeout
>- * @ingroup ScoreRWLock
>- */
>-
>-/*
>- * COPYRIGHT (c) 1989-2007.
>- * 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.org/license/LICENSE.
>- */
>-
>-#if HAVE_CONFIG_H
>-#include "config.h"
>-#endif
>-
>-#include <rtems/score/corerwlockimpl.h>
>-#include <rtems/score/threadimpl.h>
>-#include <rtems/score/threadqimpl.h>
>-
>-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:
>-#if defined(RTEMS_MULTIPROCESSING)
>- case OBJECTS_REMOTE: /* impossible */
>-#endif
>- break;
>- case OBJECTS_LOCAL:
>- _Thread_queue_Process_timeout( the_thread );
>- _Objects_Put_without_thread_dispatch( &the_thread->Object );
>- break;
>- }
>-}
>diff --git a/cpukit/score/src/threadqenqueue.c
>b/cpukit/score/src/threadqenqueue.c
>index c059556..9048551 100644
>--- a/cpukit/score/src/threadqenqueue.c
>+++ b/cpukit/score/src/threadqenqueue.c
>@@ -101,11 +101,10 @@ static void _Thread_queue_Requeue_priority(
> );
> }
>
>-void _Thread_queue_Enqueue_with_handler(
>- Thread_queue_Control *the_thread_queue,
>- Thread_Control *the_thread,
>- Watchdog_Interval timeout,
>- Thread_queue_Timeout_callout handler
>+void _Thread_queue_Enqueue(
>+ Thread_queue_Control *the_thread_queue,
>+ Thread_Control *the_thread,
>+ Watchdog_Interval timeout
> )
> {
> ISR_lock_Context lock_context;
>@@ -127,7 +126,7 @@ void _Thread_queue_Enqueue_with_handler(
> if ( timeout ) {
> _Watchdog_Initialize(
> &the_thread->Timer,
>- handler,
>+ _Thread_queue_Timeout,
> the_thread->Object.id,
> NULL
> );
>
>_______________________________________________
>vc mailing list
>vc at rtems.org
>http://lists.rtems.org/mailman/listinfo/vc
--joel
More information about the devel
mailing list