[MAJOR] migrated task, tree64 and session to pool2
task and tree64 are already very close in size and are merged together.
Overall performance gained slightly by this simple change.
diff --git a/include/import/tree.h b/include/import/tree.h
index 7c375e7..11ca6e0 100644
--- a/include/import/tree.h
+++ b/include/import/tree.h
@@ -2,6 +2,8 @@
* tree.h : tree manipulation macros and structures.
* (C) 2002 - Willy Tarreau - willy@ant-computing.com
*
+ * 2007/05/13: adapted to mempools v2.
+ *
*/
#ifndef __TREE_H__
@@ -51,8 +53,7 @@
struct tree64 *up; /* parent node. NULL = root */
};
-#define sizeof_tree64 (sizeof (struct tree64))
-extern void **pool_tree64;
+extern struct pool_head *pool2_tree64;
#define ULTREE_HEAD(l) struct ultree (l) = { .left=NULL, .right=NULL, .up=NULL, .low=0, .level=LONGBITS, .data=NULL }
#define ULTREE_INIT(l) { (l)->data = (l)->left = (l)->right = NULL; }
@@ -96,7 +97,7 @@
if (next == NULL) {
/* we'll have to insert our node here */
- *branch = new = (struct ulltree *)pool_alloc(tree64);
+ *branch = new = (struct ulltree *)pool_alloc2(pool2_tree64);
ULLTREE_INIT(new);
new->up = root;
new->value = x;
@@ -111,7 +112,7 @@
/* ok, now we know that we must insert between both. */
/* the new interconnect node */
- *branch = node = (struct ulltree *)pool_alloc(tree64); /* was <next> */
+ *branch = node = (struct ulltree *)pool_alloc2(pool2_tree64); /* was <next> */
ULLTREE_INIT(node);
node->up = root;
next->up = node;
@@ -139,7 +140,7 @@
/* the new leaf now */
node->level = m; /* set the level to the lowest common bit */
- new = (struct ulltree *)pool_alloc(tree64);
+ new = (struct ulltree *)pool_alloc2(pool2_tree64);
ULLTREE_INIT(new);
new->value = x;
new->level = ffs;
@@ -186,7 +187,7 @@
if (next == NULL) {
/* we'll have to insert our node here */
- *branch = new = (struct ultree *)pool_alloc(tree64);
+ *branch = new = (struct ultree *)pool_alloc2(pool2_tree64);
ULTREE_INIT(new);
new->up = root;
new->low = x;
@@ -200,7 +201,7 @@
/* ok, now we know that we must insert between both. */
/* the new interconnect node */
- *branch = node = (struct ultree *)pool_alloc(tree64); /* was <next> */
+ *branch = node = (struct ultree *)pool_alloc2(pool2_tree64); /* was <next> */
ULTREE_INIT(node);
node->up = root;
next->up = node;
@@ -228,7 +229,7 @@
/* the new leaf now */
node->level = m; /* set the level to the lowest common bit */
- new = (struct ultree *)pool_alloc(tree64);
+ new = (struct ultree *)pool_alloc2(pool2_tree64);
ULTREE_INIT(new);
new->low = x;
new->level = ffs;
@@ -279,7 +280,7 @@
if (next == NULL) {
/* we'll have to insert our node here */
- *branch = new =(struct ultree *)pool_alloc(tree64);
+ *branch = new =(struct ultree *)pool_alloc2(pool2_tree64);
UL2TREE_INIT(new);
new->up = root;
new->high = h;
@@ -308,7 +309,7 @@
/* ok, now we know that we must insert between both. */
/* the new interconnect node */
- *branch = node = (struct ultree *)pool_alloc(tree64); /* was <next> */
+ *branch = node = (struct ultree *)pool_alloc2(pool2_tree64); /* was <next> */
UL2TREE_INIT(node);
node->up = root;
next->up = node;
@@ -352,7 +353,7 @@
/* the new leaf now */
node->level = m; /* set the level to the lowest common bit */
- new = (struct ultree *)pool_alloc(tree64);
+ new = (struct ultree *)pool_alloc2(pool2_tree64);
UL2TREE_INIT(new);
new->high = h;
new->low = l;
@@ -456,7 +457,7 @@
goto __end; /* nothing left, don't delete the root node */ \
else { \
typeof (__root) __old; \
- pool_free(tree64, __ptr); \
+ pool_free2(pool2_tree64, __ptr); \
__old = __ptr; \
__ptr = __stack[__slen]; \
if (__ptr->left == __old) { \
@@ -506,7 +507,7 @@
goto __end; /* nothing left, don't delete the root node */ \
else { \
typeof (__root) __old; \
- pool_free(__type, __ptr); \
+ pool_free2(pool##__type, __ptr); \
__old = __ptr; \
__ptr = __stack[__slen]; \
if (__ptr->left == __old) { \
@@ -561,7 +562,7 @@
goto __end; /* nothing left, don't delete the root node */ \
else { \
typeof (__root) __old; \
- pool_free(tree64, __ptr); \
+ pool_free2(pool2_tree64, __ptr); \
__old = __ptr; \
__ptr = __stack[__slen]; \
if (__ptr->left == __old) { \
@@ -617,7 +618,7 @@
goto __end; /* nothing left, don't delete the root node */ \
else { \
typeof (__root) __old; \
- pool_free(tree64, __ptr); \
+ pool_free2(pool2_tree64, __ptr); \
__old = __ptr; \
__ptr = __stack[__slen]; \
if (__ptr->left == __old) { \
@@ -671,7 +672,7 @@
*/
down = node;
node = node->up;
- pool_free(tree64, down);
+ pool_free2(pool2_tree64, down);
if (node->data || node->up == NULL)
return node;
/* now we're sure we were sharing this empty node with another branch, let's find it */
@@ -684,7 +685,7 @@
down->up = node->up;
}
/* free the last node */
- pool_free(tree64, node);
+ pool_free2(pool2_tree64, node);
return down->up;
}
@@ -716,7 +717,7 @@
uplink = &up->right;
*uplink = down; /* we relink the lower branch above us or simply cut it */
- pool_free(tree64, node);
+ pool_free2(pool2_tree64, node);
node = up;
if (down)
down->up = node;
diff --git a/include/proto/session.h b/include/proto/session.h
index e3e5234..a18669e 100644
--- a/include/proto/session.h
+++ b/include/proto/session.h
@@ -2,7 +2,7 @@
include/proto/session.h
This file defines everything related to sessions.
- Copyright (C) 2000-2006 Willy Tarreau - w@1wt.eu
+ Copyright (C) 2000-2007 Willy Tarreau - w@1wt.eu
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
@@ -23,10 +23,15 @@
#define _PROTO_SESSION_H
#include <common/config.h>
+#include <common/memory.h>
#include <types/session.h>
+extern struct pool_head *pool2_session;
+
void session_free(struct session *s);
+/* perform minimal intializations, report 0 in case of error, 1 if OK. */
+int init_session();
#endif /* _PROTO_SESSION_H */
diff --git a/include/proto/task.h b/include/proto/task.h
index c594d52..6bee1b2 100644
--- a/include/proto/task.h
+++ b/include/proto/task.h
@@ -33,6 +33,10 @@
#include <types/task.h>
extern void *run_queue;
+extern struct pool_head *pool2_task;
+
+/* perform minimal intializations, report 0 in case of error, 1 if OK. */
+int init_task();
/* needed later */
void *tree_delete(void *node);
@@ -97,7 +101,7 @@
*/
static inline void task_free(struct task *t)
{
- pool_free(task, t);
+ pool_free2(pool2_task, t);
}
/* inserts <task> into its assigned wait queue, where it may already be. In this case, it
diff --git a/include/types/session.h b/include/types/session.h
index 7ef138f..819acfd 100644
--- a/include/types/session.h
+++ b/include/types/session.h
@@ -2,7 +2,7 @@
include/types/session.h
This file defines everything related to sessions.
- Copyright (C) 2000-2006 Willy Tarreau - w@1wt.eu
+ Copyright (C) 2000-2007 Willy Tarreau - w@1wt.eu
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
@@ -123,10 +123,6 @@
};
-#define sizeof_session sizeof(struct session)
-extern void **pool_session;
-
-
#endif /* _TYPES_SESSION_H */
/*
diff --git a/include/types/task.h b/include/types/task.h
index 42699db..e0bbd6d 100644
--- a/include/types/task.h
+++ b/include/types/task.h
@@ -42,9 +42,6 @@
void *context; /* the task's context */
};
-#define sizeof_task sizeof(struct task)
-extern void **pool_task;
-
#endif /* _TYPES_TASK_H */
/*