From a3a214293be3da4ebf819e6c5024b8fa445940c6 Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Sat, 24 Jul 2004 17:53:23 +0000 Subject: 2004-07-24 Mick Davis PR 641/rtems * rtems/src/eventsurrender.c: The problem here is that events may be lost when sent to a task which enters rtems_event_receive() with options set to wait with a timeout and to return on receipt of any event. The events are sent from an interrupt source such as a timer service routine. If more than one set of events is sent to the task before it returns, the first event set may be overwritten. --- cpukit/ChangeLog | 10 ++++++++++ cpukit/rtems/src/eventsurrender.c | 1 + 2 files changed, 11 insertions(+) diff --git a/cpukit/ChangeLog b/cpukit/ChangeLog index 19b183e28a..ca76d3a7e3 100644 --- a/cpukit/ChangeLog +++ b/cpukit/ChangeLog @@ -1,3 +1,13 @@ +2004-07-24 Mick Davis + + PR 641/rtems + * rtems/src/eventsurrender.c: The problem here is that events may be + lost when sent to a task which enters rtems_event_receive() with options + set to wait with a timeout and to return on receipt of any event. The + events are sent from an interrupt source such as a timer service + routine. If more than one set of events is sent to the task before it + returns, the first event set may be overwritten. + 2004-07-24 Joel Sherrill PR 661/rtems diff --git a/cpukit/rtems/src/eventsurrender.c b/cpukit/rtems/src/eventsurrender.c index 72ba56e9cb..7b2b8ca22a 100644 --- a/cpukit/rtems/src/eventsurrender.c +++ b/cpukit/rtems/src/eventsurrender.c @@ -96,6 +96,7 @@ void _Event_Surrender( if ( seized_events == event_condition || _Options_Is_any(option_set) ) { api->pending_events = _Event_sets_Clear( pending_events,seized_events ); + (rtems_event_set) the_thread->Wait.count = 0; *(rtems_event_set *)the_thread->Wait.return_argument = seized_events; _Event_Sync_state = EVENT_SYNC_SATISFIED; } -- cgit v1.2.3