You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@apr.apache.org by st...@apache.org on 2002/02/05 10:27:39 UTC

cvs commit: apr/memory/unix apr_pools.c

striker     02/02/05 01:27:38

  Modified:    memory/unix apr_pools.c
  Log:
  Move around some logic to make abstraction of the allocator a bit
  easier.  Node resetting now only happens in the node_malloc function.
  
  Revision  Changes    Path
  1.148     +24 -41    apr/memory/unix/apr_pools.c
  
  Index: apr_pools.c
  ===================================================================
  RCS file: /home/cvs/apr/memory/unix/apr_pools.c,v
  retrieving revision 1.147
  retrieving revision 1.148
  diff -u -r1.147 -r1.148
  --- apr_pools.c	31 Jan 2002 19:15:44 -0000	1.147
  +++ apr_pools.c	5 Feb 2002 09:27:38 -0000	1.148
  @@ -316,7 +316,7 @@
   #if APR_HAS_THREADS
           if (allocator->mutex)
               apr_thread_mutex_lock(allocator->mutex);
  -#endif
  +#endif /* APR_HAS_THREADS */
           
           /* Walk the free list to see if there are
            * any nodes on it of the requested size
  @@ -351,13 +351,14 @@
   
                   allocator->max_index = max_index;
               }
  -            
  -            node->next = NULL;
   
   #if APR_HAS_THREADS
               if (allocator->mutex)
                   apr_thread_mutex_unlock(allocator->mutex);
  -#endif
  +#endif /* APR_HAS_THREADS */
  +
  +            node->next = NULL;
  +            node->first_avail = (char *)node + SIZEOF_NODE_T;
   
               return node;
           }
  @@ -365,7 +366,7 @@
   #if APR_HAS_THREADS
           if (allocator->mutex)
               apr_thread_mutex_unlock(allocator->mutex);
  -#endif
  +#endif /* APR_HAS_THREADS */
       }
   
       /* If we found nothing, seek the sink (at index 0), if
  @@ -375,7 +376,7 @@
   #if APR_HAS_THREADS
           if (allocator->mutex)
               apr_thread_mutex_lock(allocator->mutex);
  -#endif
  +#endif /* APR_HAS_THREADS */
   
           /* Walk the free list to see if there are
            * any nodes on it of the requested size
  @@ -386,12 +387,14 @@
   
           if (node) {
               *ref = node->next;
  -            node->next = NULL;
  -            
  +
   #if APR_HAS_THREADS
               if (allocator->mutex)
                   apr_thread_mutex_unlock(allocator->mutex);
  -#endif
  +#endif /* APR_HAS_THREADS */
  +
  +            node->next = NULL;
  +            node->first_avail = (char *)node + SIZEOF_NODE_T;
   
               return node;
           }
  @@ -399,7 +402,7 @@
   #if APR_HAS_THREADS
           if (allocator->mutex)
               apr_thread_mutex_unlock(allocator->mutex);
  -#endif
  +#endif /* APR_HAS_THREADS */
       }
       
       /* If we haven't got a suitable node, malloc a new one
  @@ -480,12 +483,7 @@
           return mem;
       }
   
  -    /* Reset the active node, get ourselves a new one and activate it. */
  -    active->first_avail = (char *)active + SIZEOF_NODE_T;
  -
       if ((node = node_malloc(pool->allocator, size)) == NULL) {
  -        active->first_avail = active->endp;
  -
           if (pool->abort_fn)
               pool->abort_fn(APR_ENOMEM);
   
  @@ -496,7 +494,7 @@
   
       mem = node->first_avail;
       node->first_avail += size;
  -    
  +
       return mem;
   }
   
  @@ -520,9 +518,6 @@
           return mem;
       }
   
  -    /* Reset the active node, get ourselves a new one and activate it. */
  -    active->first_avail = (char *)active + SIZEOF_NODE_T;
  -
       if ((node = node_malloc(pool->allocator, size)) == NULL) {
           active->first_avail = active->endp;
   
  @@ -536,9 +531,9 @@
   
       mem = node->first_avail;
       node->first_avail += size;
  -    
  + 
       memset(mem, 0, size);
  -    
  + 
       return mem;
   }
   
  @@ -568,19 +563,15 @@
       /* Clear the user data. */
       pool->user_data = NULL;
   
  -    /* Reset the active node */
  -    if ((active = pool->active) == pool->self) {
  -        active->first_avail = pool->self_first_avail;
  -        return;
  -    }
  -
  -    active->first_avail = (char *)active + SIZEOF_NODE_T;
  -
  -    /* Find the node attached to the pool structure, make
  +    /* Find the node attached to the pool structure, reset it, make
        * it the active node and free the rest of the nodes.
        */
       active = pool->active = pool->self; 
       active->first_avail = pool->self_first_avail;
  +    
  +    if (active->next == NULL)
  +        return;
  +    
       node_free(pool->allocator, active->next);
       active->next = NULL;
   }
  @@ -620,17 +611,12 @@
               apr_thread_mutex_unlock(mutex);
   #endif
       }
  -    
  -    /* Reset the active block */
  -    active = pool->active;
  -    active->first_avail = (char *)active + SIZEOF_NODE_T;
  -
  + 
       /* Find the block attached to the pool structure.  Save a copy of the
        * allocator pointer, because the pool struct soon will be no more.
        */
       allocator = pool->allocator;
       active = pool->self;
  -    active->first_avail = (char *)active + SIZEOF_NODE_T;
   
       /* If this pool happens to be the owner of the allocator, free 
        * everything in the allocator (that includes the pool struct
  @@ -645,13 +631,13 @@
                   free(node);
               }
           }
  -            
  +
           ref = &active;
           while ((node = *ref) != NULL) {
               *ref = node->next;
               free(node);
           }
  -            
  +
           return;
       }
   
  @@ -828,9 +814,6 @@
           return -1;
   
       memcpy(active->first_avail, node->first_avail, cur_len);
  -
  -    /* Reset the previous active node */
  -    node->first_avail = (char *)node + SIZEOF_NODE_T;
   
       if (ps->got_a_new_node) {
           node->next = ps->free;