diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 2004-07-24 17:52:40 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 2004-07-24 17:52:40 +0000 |
commit | 0ca88a1dd42fb4df94f54b326ba19ccc84574795 (patch) | |
tree | e5bbc5fe5b2a86f5028e87049b017ec1b8b99419 | |
parent | 2004-07-24 Joel Sherrill <joel@OARcorp.com> (diff) | |
download | rtems-0ca88a1dd42fb4df94f54b326ba19ccc84574795.tar.bz2 |
2004-07-24 Mick Davis <mickd@microsol.iinet.net.au>
PR 641/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.
-rw-r--r-- | cpukit/rtems/ChangeLog | 10 | ||||
-rw-r--r-- | cpukit/rtems/src/eventsurrender.c | 1 |
2 files changed, 11 insertions, 0 deletions
diff --git a/cpukit/rtems/ChangeLog b/cpukit/rtems/ChangeLog index 241fed912c..2f84ccdee6 100644 --- a/cpukit/rtems/ChangeLog +++ b/cpukit/rtems/ChangeLog @@ -1,3 +1,13 @@ +2004-07-24 Mick Davis <mickd@microsol.iinet.net.au> + + PR 641/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 <joel@OARcorp.com> PR 652/rtems diff --git a/cpukit/rtems/src/eventsurrender.c b/cpukit/rtems/src/eventsurrender.c index 0af3a3b0c9..ffe3c1752b 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; } |