rtems_event_receive() return code question
Thomas Rauscher
trauscher at loytec.com
Mon Feb 2 17:35:12 UTC 2004
> -----Original Message-----
> From: Sergei Organov [mailto:osv at topconrd.ru]
> Sent: Monday, February 02, 2004 6:13 PM
> To: Thomas Rauscher
> Cc: rtems-users at rtems.com
> Subject: Re: rtems_event_receive() return code question
>
> "Thomas Rauscher" <trauscher at loytec.com> writes:
> > Hi,
> >
> > I've a question regarding the rtems_event_receive() semantics.
> > The API documentation unfortunately leaves some open questions.
> >
> > If a rtems_event_receive() function is called with timeout, but
> > receives events just while returning after a timeout, is it
> correct to
> > return RTEMS_TIMEOUT but have the event_out parameter set to
> > a satisfying event set?
>
> While not explicitly documented, the 'event_out' is left untouched
when
> RTEMS_TIMEOUT is returned. Thus, you need to initialize it to 0 before
calling
> rtems_event_receive() (it's almost always a good idea to
> initialize all your variables anyway). Alternatively, check return
code and don't
> use 'event_out' when something other than RTEMS_SUCCESSFUL is
returned.
>
Well, in my case *event_out is always zero before being used.
I think, that the code path I'm talking about, includes a race condition
when the rtems_event_receive() caller actually is dispatched after
waiting.
Then the return code is RTEMS_TIMEOUT and 'event_out' is changed.
At least I didn't see that the Wait.count variable of the waiting thread
is set to zero by the _Event_Timeout() function, like it is done by the
_Event_Surrender() function. This was added 2001 or so,
as it fixes a bug when sending events from interrupt service handlers.
Please correct me, if I'm wrong.
BTW, I can happily live with a return code of RTEMS_TIMEOUT and set
output events. I just wanted to make sure that this is the intended
behavior.
Best regards,
Thomas
--
Thomas Rauscher
LOYTEC electronics GmbH
Stolzenthalergasse 24/3
A-1080 Wien
Austria/Europe
trauscher at loytec.com
www.loytec.com
Phone: +43-1-4020805-15
FAX: +43-1-4020805-99
More information about the users
mailing list