From ca931dfbce1f53aa510e4974fbcc584ee4d8744e Mon Sep 17 00:00:00 2001
From: Masaq- <tilt@techie.com>
Date: Thu, 28 Feb 2019 02:18:15 +0000
Subject: realloc rings for larger window size

---
 src/pkt.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

(limited to 'src/pkt.c')

diff --git a/src/pkt.c b/src/pkt.c
index beb6291..aa295fd 100644
--- a/src/pkt.c
+++ b/src/pkt.c
@@ -430,10 +430,14 @@ void handle_extended_options(void *vcur)
 {
 	proxy_desc_t *cur = (proxy_desc_t *)vcur;
 	if (cur->extended_options[0] > 0) {
-		remove_proxy_desc_rings(cur);
+		if (cur->extended_options[0] > cur->window_size) {
+			size_t extend = cur->extended_options[0] - cur->window_size;
+			cur->send_ring = realloc(cur->send_ring, cur->extended_options[0] * sizeof(icmp_desc_t));
+			cur->recv_ring = realloc(cur->recv_ring, cur->extended_options[0] * sizeof(forward_desc_t *));
+			memset(cur->send_ring + cur->window_size, 0, extend * sizeof(icmp_desc_t));
+			memset(cur->recv_ring + cur->window_size, 0, extend * sizeof(forward_desc_t *));
+		}
 		cur->window_size = cur->extended_options[0];
-		cur->send_ring = calloc(cur->window_size, sizeof(icmp_desc_t));
-		cur->recv_ring = calloc(cur->window_size, sizeof(forward_desc_t *));
 		pt_log(kLog_verbose, "Received extended option for window size %d \n", cur->window_size);
 	}
 	if (cur->extended_options[1] > 0) {
-- 
cgit v1.2.3