From: Willy Tarreau Date: Sun, 13 May 2007 20:57:02 +0000 (+0200) Subject: [MAJOR] convert the header indexes to use mempool v2 X-Git-Tag: v1.3.11~1^2~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1d4154a7c0bc44a9d036846f005b04b2d0bbead9;p=thirdparty%2Fhaproxy.git [MAJOR] convert the header indexes to use mempool v2 --- diff --git a/include/types/proxy.h b/include/types/proxy.h index 9be81d59e8..bfbe631251 100644 --- a/include/types/proxy.h +++ b/include/types/proxy.h @@ -142,7 +142,7 @@ struct proxy { struct cap_hdr *rsp_cap; /* chained list of response headers to be captured */ struct pool_head *req_cap_pool, /* pools of pre-allocated char ** used to build the sessions */ *rsp_cap_pool; - void *hdr_idx_pool; /* pools of pre-allocated int* used for headers indexing */ + struct pool_head *hdr_idx_pool; /* pools of pre-allocated int* used for headers indexing */ char *req_add[MAX_NEWHDR], *rsp_add[MAX_NEWHDR]; /* headers to be added */ int grace; /* grace time after stop request */ char *check_req; /* HTTP or SSL request to use for PR_O_HTTP_CHK|PR_O_SSL3_CHK */ diff --git a/src/cfgparse.c b/src/cfgparse.c index b532ce92d0..5165474452 100644 --- a/src/cfgparse.c +++ b/src/cfgparse.c @@ -2413,6 +2413,10 @@ int readcfgfile(const char *file) curproxy->nb_rsp_cap * sizeof(char *), MEM_F_SHARED); + curproxy->hdr_idx_pool = create_pool("hdr_idx", + MAX_HTTP_HDR * sizeof(struct hdr_idx_elem), + MEM_F_SHARED); + /* for backwards compatibility with "listen" instances, if * fullconn is not set but maxconn is set, then maxconn * is used. diff --git a/src/client.c b/src/client.c index 38815e7712..50a0f5d2fb 100644 --- a/src/client.c +++ b/src/client.c @@ -230,8 +230,6 @@ int event_accept(int fd) { txn->req.som = txn->req.eoh = 0; /* relative to the buffer */ txn->auth_hdr.len = -1; - txn->hdr_idx.size = MAX_HTTP_HDR; - if (p->nb_req_cap > 0) { if ((txn->req.cap = pool_alloc2(p->req_cap_pool)) == NULL) { /* no memory */ @@ -258,9 +256,10 @@ int event_accept(int fd) { } - if ((txn->hdr_idx.v = - pool_alloc_from(p->hdr_idx_pool, txn->hdr_idx.size*sizeof(*txn->hdr_idx.v))) - == NULL) { /* no memory */ + txn->hdr_idx.size = MAX_HTTP_HDR; + + if ((txn->hdr_idx.v = pool_alloc2(p->hdr_idx_pool)) == NULL) { + /* no memory */ if (txn->rsp.cap != NULL) pool_free2(p->rsp_cap_pool, txn->rsp.cap); if (txn->req.cap != NULL) @@ -347,7 +346,7 @@ int event_accept(int fd) { if ((s->req = pool_alloc2(pool2_buffer)) == NULL) { /* no memory */ if (txn->hdr_idx.v != NULL) - pool_free_to(p->hdr_idx_pool, txn->hdr_idx.v); + pool_free2(p->hdr_idx_pool, txn->hdr_idx.v); if (txn->rsp.cap != NULL) pool_free2(p->rsp_cap_pool, txn->rsp.cap); if (txn->req.cap != NULL) @@ -370,7 +369,7 @@ int event_accept(int fd) { if ((s->rep = pool_alloc2(pool2_buffer)) == NULL) { /* no memory */ pool_free2(pool2_buffer, s->req); if (txn->hdr_idx.v != NULL) - pool_free_to(p->hdr_idx_pool, txn->hdr_idx.v); + pool_free2(p->hdr_idx_pool, txn->hdr_idx.v); if (txn->rsp.cap != NULL) pool_free2(p->rsp_cap_pool, txn->rsp.cap); if (txn->req.cap != NULL) diff --git a/src/session.c b/src/session.c index 01073de621..d13f99504e 100644 --- a/src/session.c +++ b/src/session.c @@ -45,7 +45,7 @@ void session_free(struct session *s) pool_free2(pool2_buffer, s->rep); if (txn->hdr_idx.v != NULL) - pool_free_to(s->fe->hdr_idx_pool, txn->hdr_idx.v); + pool_free2(s->fe->hdr_idx_pool, txn->hdr_idx.v); if (txn->rsp.cap != NULL) { struct cap_hdr *h;