diff --git a/src/ip_reassembly/ip_reassembly.cpp b/src/ip_reassembly/ip_reassembly.cpp index 4c93dcc..a1378e2 100644 --- a/src/ip_reassembly/ip_reassembly.cpp +++ b/src/ip_reassembly/ip_reassembly.cpp @@ -816,14 +816,19 @@ void ip_reassembly_expire(struct ip_reassembly *assy, uint64_t now) { struct ip_flow *flow = NULL; uint64_t timeout = assy->timeout; - TAILQ_FOREACH(flow, &assy->lru, lru) - if (timeout + flow->create_time <= now) { - IP_REASSEMBLE_DEBUG1("expire ip flow: discarding old fragmented packets", &flow->key); - ip_reassembly_del_flow(assy, flow); - ip_reassembly_stat_inc(assy, timeout, &flow->key); - ip_flow_free(flow); + if (timeout + flow->create_time <= now) + { + IP_REASSEMBLE_DEBUG1("expire ip flow: discarding old fragmented packets", &flow->key); + ip_reassembly_del_flow(assy, flow); + ip_reassembly_stat_inc(assy, timeout, &flow->key); + ip_flow_free(flow); + } + else + { + break; + } } }