rtems: Use correct sync state for system events

This commit is contained in:
Sebastian Huber
2012-10-31 17:03:44 +01:00
parent 93b29f08f0
commit 736b8d2714
3 changed files with 12 additions and 29 deletions
+1 -1
View File
@@ -448,7 +448,7 @@ void _Event_Surrender(
void _Event_Timeout(
Objects_Id id,
void *ignored
void *arg
);
RTEMS_EVENT_EXTERN Thread_blocking_operation_States _Event_Sync_state;
+1 -1
View File
@@ -81,7 +81,7 @@ void _Event_Seize(
&executing->Timer,
_Event_Timeout,
executing->Object.id,
NULL
sync_state
);
_Watchdog_Insert_ticks( &executing->Timer, ticks );
}
+10 -27
View File
@@ -10,39 +10,22 @@
*/
#if HAVE_CONFIG_H
#include "config.h"
#include "config.h"
#endif
#include <rtems/system.h>
#include <rtems/rtems/status.h>
#include <rtems/rtems/event.h>
#include <rtems/score/isr.h>
#include <rtems/score/object.h>
#include <rtems/rtems/options.h>
#include <rtems/score/states.h>
#include <rtems/score/thread.h>
#include <rtems/rtems/tasks.h>
/*
* _Event_Timeout
*
* This routine processes a thread which timeouts while waiting to
* receive an event_set. It is called by the watchdog handler.
*
* Input parameters:
* id - thread id
*
* Output parameters: NONE
*/
void _Event_Timeout(
Objects_Id id,
void *ignored
void *arg
)
{
Thread_Control *the_thread;
Objects_Locations location;
ISR_Level level;
Thread_Control *the_thread;
Objects_Locations location;
ISR_Level level;
Thread_blocking_operation_States *sync_state;
sync_state = arg;
the_thread = _Thread_Get( id, &location );
switch ( location ) {
@@ -71,8 +54,8 @@ void _Event_Timeout(
the_thread->Wait.count = 0;
if ( _Thread_Is_executing( the_thread ) ) {
if ( _Event_Sync_state == THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED )
_Event_Sync_state = THREAD_BLOCKING_OPERATION_TIMEOUT;
if ( *sync_state == THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED )
*sync_state = THREAD_BLOCKING_OPERATION_TIMEOUT;
}
the_thread->Wait.return_code = RTEMS_TIMEOUT;