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