Index: uspace/srv/net/tl/udp/udp.c
===================================================================
--- uspace/srv/net/tl/udp/udp.c	(revision de229f8e24200a50c6b6ddc7e461db12f3c9e0d8)
+++ uspace/srv/net/tl/udp/udp.c	(revision a63ff7d60c21250216e5d285a45b3709130035c1)
@@ -626,5 +626,5 @@
 
 	// get the next received packet
-	packet_id = dyn_fifo_value(&socket->received);
+	packet_id = dyn_fifo_pop(&socket->received);
 	if (packet_id < 0)
 		return NO_DATA;
@@ -650,17 +650,15 @@
 	rc = data_reply(addr, *addrlen);
 	if (rc != EOK)
-		return rc;
+		return udp_release_and_return(packet, rc);
 
 	// trim the header
 	rc = packet_trim(packet, UDP_HEADER_SIZE, 0);
 	if (rc != EOK)
-		return rc;
+		return udp_release_and_return(packet, rc);
 
 	// reply the packets
 	rc = socket_reply_packets(packet, &length);
 	if (rc != EOK)
-		return rc;
-
-	dyn_fifo_pop(&socket->received);
+		return udp_release_and_return(packet, rc);
 
 	// release the packet and return the total length
