2004-02-26 Thomas Rauscher <trauscher@loytec.com.

PR 584/RTEMS
	* src/eventtimeout.c: Fix critical section window.
This commit is contained in:
Joel Sherrill
2004-02-26 17:04:27 +00:00
parent 70e27c2d80
commit 9a93d54070
2 changed files with 26 additions and 9 deletions

View File

@@ -1,3 +1,8 @@
2004-02-26 Thomas Rauscher <trauscher@loytec.com.
PR 584/RTEMS
* src/eventtimeout.c: Fix critical section window.
2003-10-22 Joel Sherrill <joel@OARcorp.com>
PR 512/core

View File

@@ -39,8 +39,9 @@ void _Event_Timeout(
void *ignored
)
{
Thread_Control *the_thread;
Objects_Locations location;
Thread_Control *the_thread;
Objects_Locations location;
ISR_Level level;
the_thread = _Thread_Get( id, &location );
switch ( location ) {
@@ -61,14 +62,25 @@ void _Event_Timeout(
* a timeout is not allowed to occur.
*/
if ( _Event_Sync_state != EVENT_SYNC_SYNCHRONIZED &&
_Thread_Is_executing( the_thread ) ) {
if ( _Event_Sync_state != EVENT_SYNC_SATISFIED )
_Event_Sync_state = EVENT_SYNC_TIMEOUT;
} else {
the_thread->Wait.return_code = RTEMS_TIMEOUT;
_Thread_Unblock( the_thread );
_ISR_Disable( level );
if ( the_thread->Wait.count ) { /* verify thread is waiting */
the_thread->Wait.count = 0;
if ( _Event_Sync_state != EVENT_SYNC_SYNCHRONIZED &&
_Thread_Is_executing( the_thread ) ) {
if ( _Event_Sync_state != EVENT_SYNC_SATISFIED ) {
_Event_Sync_state = EVENT_SYNC_TIMEOUT;
}
_ISR_Enable( level );
} else {
the_thread->Wait.return_code = RTEMS_TIMEOUT;
_ISR_Enable( level );
_Thread_Unblock( the_thread );
}
}
else {
_ISR_Enable( level );
}
_Thread_Unnest_dispatch();
break;
}