diff options
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; } |