[BUG] http: memory leak with captures when using keep-alive
Hank A. Paulson reported a massive memory leak when using keep-alive
mode. The information he provided made it easy to find that captured
request and response headers were erased but not released when renewing
a request.
diff --git a/src/proto_http.c b/src/proto_http.c
index 12647df..9b9176c 100644
--- a/src/proto_http.c
+++ b/src/proto_http.c
@@ -6310,11 +6310,19 @@
if (fe->options2 & PR_O2_REQBUG_OK)
txn->req.err_pos = -1; /* let buggy requests pass */
- if (txn->req.cap)
+ if (txn->req.cap) {
+ struct cap_hdr *h;
+ for (h = fe->req_cap; h; h = h->next)
+ pool_free2(h->pool, txn->req.cap[h->index]);
memset(txn->req.cap, 0, fe->nb_req_cap * sizeof(void *));
+ }
- if (txn->rsp.cap)
+ if (txn->rsp.cap) {
+ struct cap_hdr *h;
+ for (h = fe->rsp_cap; h; h = h->next)
+ pool_free2(h->pool, txn->rsp.cap[h->index]);
memset(txn->rsp.cap, 0, fe->nb_rsp_cap * sizeof(void *));
+ }
if (txn->hdr_idx.v)
hdr_idx_init(&txn->hdr_idx);