RTEMS Event Receive Issue
Mike Siers
mikes at poliac.com
Mon Feb 10 16:20:22 UTC 2003
Hi All,
Attached is a small patch to the network daemon task
code. I just added code to check the return value of
the rtems_bsdnet_event_receive function. Only when
this function returns a SUCCESSFUL status, will the
event flags be checked.
This is more of a code cleanup issue than a bug. The
patch will just ensure the ipintr() and arpintr()
functions are only called when a event is signaled.
Please review and let me know if you think this is
the correct fix. The rtems_glue.c file is in the
cpukit/libnetworking/rtems directory.
Thanks
Mike Siers
--- rtems_glue.c Fri Nov 1 12:43:57 2002
+++ rtems_glue.new Mon Feb 10 10:09:51 2003
@@ -493,6 +493,7 @@
static void
networkDaemon (void *task_argument)
{
+ rtems_status_code sc;
rtems_event_set events;
rtems_interval now;
int ticksPassed;
@@ -505,14 +506,18 @@
timeout = c->c_time;
else
timeout = RTEMS_NO_TIMEOUT;
- rtems_bsdnet_event_receive (NETISR_EVENTS,
+
+ sc = rtems_bsdnet_event_receive (NETISR_EVENTS,
RTEMS_EVENT_ANY | RTEMS_WAIT,
timeout,
&events);
- if (events & NETISR_IP_EVENT)
- ipintr ();
- if (events & NETISR_ARP_EVENT)
- arpintr ();
+ if ( sc == RTEMS_SUCCESSFUL ) {
+ if (events & NETISR_IP_EVENT)
+ ipintr ();
+ if (events & NETISR_ARP_EVENT)
+ arpintr ();
+ }
+
rtems_clock_get (RTEMS_CLOCK_GET_TICKS_SINCE_BOOT, &now);
ticksPassed = now - ticksWhenCalloutsLastChecked;
if (ticksPassed != 0) {
More information about the users
mailing list