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: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]