forked from Imagelibrary/rtems
2004-07-24 Mick Davis <mickd@microsol.iinet.net.au>
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.
This commit is contained in:
@@ -1,3 +1,13 @@
|
|||||||
|
2004-07-24 Mick Davis <mickd@microsol.iinet.net.au>
|
||||||
|
|
||||||
|
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 <joel@OARcorp.com>
|
2004-07-24 Joel Sherrill <joel@OARcorp.com>
|
||||||
|
|
||||||
PR 661/rtems
|
PR 661/rtems
|
||||||
|
|||||||
@@ -96,6 +96,7 @@ void _Event_Surrender(
|
|||||||
if ( seized_events == event_condition || _Options_Is_any(option_set) ) {
|
if ( seized_events == event_condition || _Options_Is_any(option_set) ) {
|
||||||
api->pending_events =
|
api->pending_events =
|
||||||
_Event_sets_Clear( pending_events,seized_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;
|
*(rtems_event_set *)the_thread->Wait.return_argument = seized_events;
|
||||||
_Event_Sync_state = EVENT_SYNC_SATISFIED;
|
_Event_Sync_state = EVENT_SYNC_SATISFIED;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user