udp: fix optimistic assert for UDP RX 60/38360/3
authorMohammed Hawari <mohammed@hawari.fr>
Mon, 27 Feb 2023 14:33:30 +0000 (15:33 +0100)
committerFlorin Coras <florin.coras@gmail.com>
Wed, 1 Mar 2023 16:46:28 +0000 (16:46 +0000)
Change-Id: I431c4a6f409b129e4290dba2e1acadea460ac797
Signed-off-by: Mohammed Hawari <mohammed@hawari.fr>
Type: improvement

src/vnet/udp/udp_error.def
src/vnet/udp/udp_input.c

index 717285d..ef19970 100644 (file)
@@ -21,6 +21,7 @@ udp_error (LENGTH_ERROR, length_error, ERROR, "Packets with length errors")
 udp_error (PUNT, punt, ERROR, "No listener punt")
 udp_error (ENQUEUED, enqueued, INFO, "Packets enqueued")
 udp_error (FIFO_FULL, fifo_full, ERROR, "Fifo full")
+udp_error (FIFO_NOMEM, fifo_nomem, ERROR, "Fifo no mem")
 udp_error (NOT_READY, not_ready, ERROR, "Connection not ready")
 udp_error (ACCEPT, accept, INFO, "Accepted session")
 udp_error (CREATE_SESSION, create_session, ERROR, "Failed to create session")
index d5dd159..6e5ed15 100644 (file)
@@ -161,7 +161,11 @@ udp_connection_enqueue (udp_connection_t * uc0, session_t * s0,
                                                 TRANSPORT_PROTO_UDP,
                                                 queue_event);
     }
-  ASSERT (wrote0 > 0);
+
+  /* In some rare cases, session_enqueue_dgram_connection can fail because a
+   * chunk cannot be allocated in the RX FIFO */
+  if (PREDICT_FALSE (wrote0 == 0))
+    *error0 = UDP_ERROR_FIFO_NOMEM;
 
 unlock_rx_lock: