[MAJOR] convert the header indexes to use mempool v2
diff --git a/include/types/proxy.h b/include/types/proxy.h
index 9be81d5..bfbe631 100644
--- a/include/types/proxy.h
+++ b/include/types/proxy.h
@@ -142,7 +142,7 @@
 	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 b532ce9..5165474 100644
--- a/src/cfgparse.c
+++ b/src/cfgparse.c
@@ -2413,6 +2413,10 @@
 							     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 38815e7..50a0f5d 100644
--- a/src/client.c
+++ b/src/client.c
@@ -230,8 +230,6 @@
 			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 @@
 			}
 
 
-			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 @@
 
 		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 @@
 		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 01073de..d13f995 100644
--- a/src/session.c
+++ b/src/session.c
@@ -45,7 +45,7 @@
 		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;