You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by mt...@apache.org on 2004/10/06 12:12:50 UTC
cvs commit: jakarta-tomcat-connectors/jk/native/common jk_pool.c jk_pool.h
mturk 2004/10/06 03:12:50
Modified: jk/native/common jk_pool.c jk_pool.h
Log:
Add alignment macros and use size_t instead unsigned.
Revision Changes Path
1.8 +31 -41 jakarta-tomcat-connectors/jk/native/common/jk_pool.c
Index: jk_pool.c
===================================================================
RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native/common/jk_pool.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- jk_pool.c 24 Feb 2004 08:45:46 -0000 1.7
+++ jk_pool.c 6 Oct 2004 10:12:49 -0000 1.8
@@ -31,7 +31,7 @@
void jk_open_pool(jk_pool_t *p,
jk_pool_atom_t *buf,
- unsigned size)
+ size_t size)
{
p->pos = 0;
p->size = size;
@@ -44,20 +44,18 @@
void jk_close_pool(jk_pool_t *p)
{
- if(p) {
- jk_reset_pool(p);
- if(p->dynamic) {
- free(p->dynamic);
- }
+ jk_reset_pool(p);
+ if (p->dynamic) {
+ free(p->dynamic);
}
}
void jk_reset_pool(jk_pool_t *p)
{
- if(p && p->dyn_pos && p->dynamic) {
- unsigned i;
- for(i = 0 ; i < p->dyn_pos ; i++) {
- if(p->dynamic[i]) {
+ if (p->dyn_pos && p->dynamic) {
+ size_t i;
+ for (i = 0 ; i < p->dyn_pos ; i++) {
+ if (p->dynamic[i]) {
free(p->dynamic[i]);
}
}
@@ -67,27 +65,17 @@
p->pos = 0;
}
-void *jk_pool_alloc(jk_pool_t *p,
- size_t size)
+void *jk_pool_alloc(jk_pool_t *p, size_t size)
{
void *rc = NULL;
- if(p && size > 0) {
- /* Round size to the upper mult of 8 (or 16 on iSeries) */
- size--;
-#ifdef AS400
- size /= 16;
- size = (size + 1) * 16;
-#else
- size /= 8;
- size = (size + 1) * 8;
-#endif
- if((p->size - p->pos) >= size) {
- rc = &(p->buf[p->pos]);
- p->pos += size;
- } else {
- rc = jk_pool_dyn_alloc(p, size);
- }
+ size = JK_ALIGN_DEFAULT(size);
+ if ((p->size - p->pos) >= size) {
+ rc = &(p->buf[p->pos]);
+ p->pos += size;
+ }
+ else {
+ rc = jk_pool_dyn_alloc(p, size);
}
return rc;
@@ -115,7 +103,7 @@
void *jk_pool_strdup(jk_pool_t *p,
const char *s)
{
- char *rc = NULL;
+ void *rc = NULL;
if(s && p) {
size_t size = strlen(s);
@@ -136,13 +124,13 @@
void jk_dump_pool(jk_pool_t *p,
FILE *f)
{
- fprintf(f, "Dumping for pool [%x]\n", p);
+ fprintf(f, "Dumping for pool [%p]\n", p);
fprintf(f, "size [%d]\n", p->size);
fprintf(f, "pos [%d]\n", p->pos);
- fprintf(f, "buf [%x]\n", p->buf);
+ fprintf(f, "buf [%p]\n", p->buf);
fprintf(f, "dyn_size [%d]\n", p->dyn_size);
fprintf(f, "dyn_pos [%d]\n", p->dyn_pos);
- fprintf(f, "dynamic [%x]\n", p->dynamic);
+ fprintf(f, "dynamic [%p]\n", p->dynamic);
fflush(f);
}
@@ -150,13 +138,14 @@
static void *jk_pool_dyn_alloc(jk_pool_t *p,
size_t size)
{
- void *rc = NULL;
+ void *rc;
- if(p->dyn_size == p->dyn_pos) {
- unsigned new_dyn_size = p->dyn_size + DEFAULT_DYNAMIC;
+ if (p->dyn_size == p->dyn_pos) {
+ size_t new_dyn_size = p->dyn_size * 2 + DEFAULT_DYNAMIC;
void **new_dynamic = (void **)malloc(new_dyn_size * sizeof(void *));
- if(new_dynamic) {
- if(p->dynamic) {
+ if (new_dynamic) {
+ if (p->dynamic) {
+ /* Copy old dynamic slots */
memcpy(new_dynamic,
p->dynamic,
p->dyn_size * sizeof(void *));
@@ -166,14 +155,15 @@
p->dynamic = new_dynamic;
p->dyn_size = new_dyn_size;
- } else {
+ }
+ else {
return NULL;
}
}
rc = p->dynamic[p->dyn_pos] = malloc(size);
- if(p->dynamic[p->dyn_pos]) {
- p->dyn_pos ++;
+ if (p->dynamic[p->dyn_pos]) {
+ p->dyn_pos++;
}
return rc;
1.7 +27 -14 jakarta-tomcat-connectors/jk/native/common/jk_pool.h
Index: jk_pool.h
===================================================================
RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native/common/jk_pool.h,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- jk_pool.h 24 Feb 2004 08:45:46 -0000 1.6
+++ jk_pool.h 6 Oct 2004 10:12:49 -0000 1.7
@@ -64,11 +64,26 @@
#elif defined(IRIX)
typedef long long jk_pool_atom_t;
#elif defined(AS400)
- typedef void * jk_pool_atom_t;
+ typedef void * jk_pool_atom_t;
#else
typedef long long jk_pool_atom_t;
#endif
+/**
+ * Alignment macros
+ */
+
+/* JK_ALIGN() is only to be used to align on a power of 2 boundary */
+#define JK_ALIGN(size, boundary) \
+ (((size) + ((boundary) - 1)) & ~((boundary) - 1))
+
+/** Default alignment */
+#ifdef AS400
+#define JK_ALIGN_DEFAULT(size) JK_ALIGN(size, 16)
+#else
+#define JK_ALIGN_DEFAULT(size) JK_ALIGN(size, 8)
+#endif
+
/*
* Pool size in number of pool atoms.
*/
@@ -77,22 +92,20 @@
#define BIG_POOL_SIZE 2*SMALL_POOL_SIZE /* Bigger 1K atom pool. */
#define HUGE_POOL_SIZE 2*BIG_POOL_SIZE /* Huge 2K atom pool. */
- /** XXX Move it to impl, make it incomplete
- */
-struct jk_pool {
- unsigned size;
- unsigned pos;
- char *buf;
- unsigned dyn_size;
- unsigned dyn_pos;
- void **dynamic;
+typedef struct jk_pool_t jk_pool_t;
+/** jk pool structure */
+struct jk_pool_t {
+ size_t size;
+ size_t pos;
+ char *buf;
+ size_t dyn_size;
+ size_t dyn_pos;
+ void **dynamic;
};
-typedef struct jk_pool jk_pool_t;
-
void jk_open_pool(jk_pool_t *p,
jk_pool_atom_t *buf,
- unsigned size);
+ size_t size);
void jk_close_pool(jk_pool_t *p);
---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-dev-help@jakarta.apache.org