Browse Source

fix RST storm: tcp_recved before tcp_close in proxy_poll_cb cleanup

congestion
Evgeny 4 months ago
parent
commit
8de8b5bb41
  1. 5
      src/tcp_proxy.c

5
src/tcp_proxy.c

@ -325,7 +325,10 @@ static err_t proxy_poll_cb(void *arg, struct tcp_pcb *pcb) {
(unsigned long long)pc->remote_stream_id, pc->closing_rem, pc->closing_sent,
pc->pcb->cwnd, pc->pcb->snd_buf, (void*)pc->pcb->unsent, (void*)pc->pcb->unacked);
struct tcp_pcb *save = pc->pcb;
tcp_arg(save, NULL); pc->pcb = NULL; tcp_close(save);
tcp_arg(save, NULL); pc->pcb = NULL;
{ uint16_t wnd_gap = TCP_WND_MAX(save) - save->rcv_wnd;
if (wnd_gap > 0) tcp_recved(save, wnd_gap); }
tcp_close(save);
struct tcp_proxy *proxy = pc->proxy;
struct proxy_conn **prev = &proxy->conns;
while (*prev) { if (*prev == pc) { *prev = pc->next; proxy->conn_count--; break; } prev = &(*prev)->next; }

Loading…
Cancel
Save