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