From 0c74d6abbaf6d3aee0475bc311e2c27bb2a6a171 Mon Sep 17 00:00:00 2001 From: George Thessalonikefs Date: Fri, 23 Jul 2021 18:25:06 +0200 Subject: [PATCH] - Fix for #411, #439, #469: stream reuse, fix loop in the free pending_tcp list. --- services/outside_network.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/services/outside_network.c b/services/outside_network.c index 023e09420..54fcfdd5c 100644 --- a/services/outside_network.c +++ b/services/outside_network.c @@ -1032,8 +1032,12 @@ decommission_pending_tcp(struct outside_network* outnet, struct pending_tcp* pend) { verbose(VERB_CLIENT, "decommission_pending_tcp"); - pend->next_free = outnet->tcp_free; - outnet->tcp_free = pend; + /* A certain code path can lead here twice for the same pending_tcp + * creating a loop in the free pending_tcp list. */ + if(outnet->tcp_free != pend) { + pend->next_free = outnet->tcp_free; + outnet->tcp_free = pend; + } log_assert(outnet->tcp_free->next_free != outnet->tcp_free); if(pend->reuse.node.key) { /* needs unlink from the reuse tree to get deleted */