From 38b02bbcc0381d898a864b99a3a48af04bad20e9 Mon Sep 17 00:00:00 2001 From: sakridge Date: Fri, 21 Jan 2022 08:22:50 -0800 Subject: [PATCH] Handle already discarded packets in discard_excess_packets (#22594) --- core/src/sigverify_stage.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/core/src/sigverify_stage.rs b/core/src/sigverify_stage.rs index 1d3101da44..37d511332c 100644 --- a/core/src/sigverify_stage.rs +++ b/core/src/sigverify_stage.rs @@ -195,6 +195,7 @@ impl SigVerifyStage { .iter_mut() .rev() .flat_map(|batch| batch.packets.iter_mut().rev()) + .filter(|packet| !packet.meta.discard()) .map(|packet| (packet.meta.addr, packet)) .into_group_map(); // Allocate max_packets evenly across addresses. @@ -372,11 +373,14 @@ mod tests { let mut batch = PacketBatch::default(); batch.packets.resize(10, Packet::default()); batch.packets[3].meta.addr = std::net::IpAddr::from([1u16; 8]); + batch.packets[3].meta.set_discard(true); + batch.packets[4].meta.addr = std::net::IpAddr::from([2u16; 8]); let mut batches = vec![batch]; let max = 3; SigVerifyStage::discard_excess_packets(&mut batches, max); assert_eq!(count_non_discard(&batches), max); assert!(!batches[0].packets[0].meta.discard()); - assert!(!batches[0].packets[3].meta.discard()); + assert!(batches[0].packets[3].meta.discard()); + assert!(!batches[0].packets[4].meta.discard()); } }