diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 2006-11-15 14:08:49 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 2006-11-15 14:08:49 +0000 |
commit | 047d67ab257600533bc3a1047a2a54d287dcc2d2 (patch) | |
tree | 1fc509d0e86d7998aa162912bb9c3d01a7606fed /cpukit/score/src | |
parent | Regenerate. (diff) | |
download | rtems-047d67ab257600533bc3a1047a2a54d287dcc2d2.tar.bz2 |
2006-11-15 Joel Sherrill <joel.sherrill@oarcorp.com>
* libcsupport/src/termios.c, posix/Makefile.am, posix/preinstall.am,
posix/include/rtems/posix/config.h, posix/include/rtems/posix/time.h,
sapi/src/posixapi.c, score/Makefile.am, score/preinstall.am,
score/include/rtems/score/corerwlock.h,
score/include/rtems/score/threadq.h,
score/src/corerwlockobtainread.c, score/src/threadqenqueue.c,
score/src/threadqtimeout.c: Adding POSIX barriers, POSIX spinlocks,
and partial implementation of POSIX rwlocks.
* posix/include/rtems/posix/barrier.h,
posix/include/rtems/posix/rwlock.h,
posix/include/rtems/posix/spinlock.h,
posix/inline/rtems/posix/barrier.inl,
posix/inline/rtems/posix/rwlock.inl,
posix/inline/rtems/posix/spinlock.inl,
posix/src/barrierattrdestroy.c, posix/src/barrierattrgetpshared.c,
posix/src/barrierattrinit.c, posix/src/barrierattrsetpshared.c,
posix/src/pbarrier.c, posix/src/pbarrierdestroy.c,
posix/src/pbarrierinit.c, posix/src/pbarriertranslatereturncode.c,
posix/src/pbarrierwait.c, posix/src/prwlock.c,
posix/src/prwlockdestroy.c, posix/src/prwlockinit.c,
posix/src/prwlockrdlock.c, posix/src/prwlocktimedrdlock.c,
posix/src/prwlocktimedwrlock.c,
posix/src/prwlocktranslatereturncode.c, posix/src/prwlocktryrdlock.c,
posix/src/prwlocktrywrlock.c, posix/src/prwlockunlock.c,
posix/src/prwlockwrlock.c, posix/src/pspin.c,
posix/src/pspindestroy.c, posix/src/pspininit.c,
posix/src/pspinlock.c, posix/src/pspinlocktranslatereturncode.c,
posix/src/pspintrylock.c, posix/src/pspinunlock.c,
posix/src/rwlockattrdestroy.c, posix/src/rwlockattrgetpshared.c,
posix/src/rwlockattrinit.c, posix/src/rwlockattrsetpshared.c: New files.
Diffstat (limited to 'cpukit/score/src')
-rw-r--r-- | cpukit/score/src/corerwlockobtainread.c | 6 | ||||
-rw-r--r-- | cpukit/score/src/threadqenqueue.c | 11 | ||||
-rw-r--r-- | cpukit/score/src/threadqtimeout.c | 27 |
3 files changed, 13 insertions, 31 deletions
diff --git a/cpukit/score/src/corerwlockobtainread.c b/cpukit/score/src/corerwlockobtainread.c index c90bf02f07..46f77043e8 100644 --- a/cpukit/score/src/corerwlockobtainread.c +++ b/cpukit/score/src/corerwlockobtainread.c @@ -97,7 +97,11 @@ void _CORE_RWLock_Obtain_for_reading( executing->Wait.return_code = CORE_RWLOCK_SUCCESSFUL; _ISR_Enable( level ); - _Thread_queue_Enqueue( &the_rwlock->Wait_queue, timeout ); + _Thread_queue_Enqueue_with_handler( + &the_rwlock->Wait_queue, + timeout, + _CORE_RWLock_Timeout + ); /* return to API level so it can dispatch and we block */ } diff --git a/cpukit/score/src/threadqenqueue.c b/cpukit/score/src/threadqenqueue.c index 848b256b53..3cbf76800b 100644 --- a/cpukit/score/src/threadqenqueue.c +++ b/cpukit/score/src/threadqenqueue.c @@ -30,7 +30,7 @@ /*PAGE * - * _Thread_queue_Enqueue + * _Thread_queue_Enqueue_with_handler * * This routine blocks a thread, places it on a thread, and optionally * starts a timeout timer. @@ -45,9 +45,10 @@ * only case */ -void _Thread_queue_Enqueue( - Thread_queue_Control *the_thread_queue, - Watchdog_Interval timeout +void _Thread_queue_Enqueue_with_handler( + Thread_queue_Control *the_thread_queue, + Watchdog_Interval timeout, + Thread_queue_Timeout_callout handler ) { Thread_Control *the_thread; @@ -64,7 +65,7 @@ void _Thread_queue_Enqueue( if ( timeout ) { _Watchdog_Initialize( &the_thread->Timer, - _Thread_queue_Timeout, + handler, the_thread->Object.id, NULL ); diff --git a/cpukit/score/src/threadqtimeout.c b/cpukit/score/src/threadqtimeout.c index 8913aa123a..1a135482f1 100644 --- a/cpukit/score/src/threadqtimeout.c +++ b/cpukit/score/src/threadqtimeout.c @@ -25,8 +25,7 @@ #include <rtems/score/threadq.h> #include <rtems/score/tqdata.h> -/*PAGE - * +/* * _Thread_queue_Timeout * * This routine processes a thread which timeouts while waiting on @@ -44,7 +43,6 @@ void _Thread_queue_Timeout( ) { Thread_Control *the_thread; - Thread_queue_Control *the_thread_queue; Objects_Locations location; the_thread = _Thread_Get( id, &location ); @@ -53,28 +51,7 @@ void _Thread_queue_Timeout( case OBJECTS_REMOTE: /* impossible */ break; case OBJECTS_LOCAL: - 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 ); - } + _Thread_queue_Process_timeout( the_thread ); _Thread_Unnest_dispatch(); break; } |