NetworkInterface.c loops calling prvNetworkInterfaceInput() repeatedly UNTIL it fails. The result is each received frame is queued multiple times filling the queue - leading to dropped frames and a significant performance hit. The expected behavior is to loop until prvNetworkInterfaceInput() succeeds queueing each frame only once.
Furthermore, prvNetworkInterfaceInput() should return true if the frame was either successfully queued or was discarded (filtered), and should only return false if the message could not be queued.
If prvNetworkInterfaceInput() fails (due to a full queue) prvRXHandlerTask() should yield to allow possibly lower priority tasks to process the queue before trying again.
NetworkInterface.c loops calling prvNetworkInterfaceInput() repeatedly UNTIL it fails. The result is each received frame is queued multiple times filling the queue - leading to dropped frames and a significant performance hit. The expected behavior is to loop until prvNetworkInterfaceInput() succeeds queueing each frame only once.
Furthermore, prvNetworkInterfaceInput() should return true if the frame was either successfully queued or was discarded (filtered), and should only return false if the message could not be queued.
If prvNetworkInterfaceInput() fails (due to a full queue) prvRXHandlerTask() should yield to allow possibly lower priority tasks to process the queue before trying again.