You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@apr.apache.org by jw...@apache.org on 2002/04/10 18:53:39 UTC
cvs commit: apr-util/buckets apr_buckets_alloc.c
jwoolley 02/04/10 09:53:39
Modified: buckets apr_buckets_alloc.c
Log:
register a cleanup on the pool passed to apr_bucket_alloc_create(). there
were mixed feelings in the group about whether we should do this or not,
but it seems that the majority feel it *should* be done. it's more consistent
with the rest of APR this way I suppose.
Revision Changes Path
1.7 +14 -0 apr-util/buckets/apr_buckets_alloc.c
Index: apr_buckets_alloc.c
===================================================================
RCS file: /home/cvs/apr-util/buckets/apr_buckets_alloc.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -d -u -r1.6 -r1.7
--- apr_buckets_alloc.c 1 Apr 2002 05:41:39 -0000 1.6
+++ apr_buckets_alloc.c 10 Apr 2002 16:53:38 -0000 1.7
@@ -71,11 +71,18 @@
* structures can be allocated.
*/
struct apr_bucket_alloc_t {
+ apr_pool_t *pool;
apr_allocator_t *allocator;
node_header_t *freelist;
apr_memnode_t *blocks;
};
+static apr_status_t alloc_cleanup(void *data)
+{
+ apr_bucket_alloc_destroy(data);
+ return APR_SUCCESS;
+}
+
APU_DECLARE_NONSTD(apr_bucket_alloc_t *) apr_bucket_alloc_create(apr_pool_t *p)
{
apr_allocator_t *allocator;
@@ -85,16 +92,23 @@
apr_allocator_create(&allocator);
block = apr_allocator_alloc(allocator, ALLOC_AMT);
list = (apr_bucket_alloc_t *)block->first_avail;
+ list->pool = p;
list->allocator = allocator;
list->freelist = NULL;
list->blocks = block;
block->first_avail += APR_ALIGN_DEFAULT(sizeof(*list));
+
+ apr_pool_cleanup_register(list->pool, list, alloc_cleanup,
+ apr_pool_cleanup_null);
+
return list;
}
APU_DECLARE_NONSTD(void) apr_bucket_alloc_destroy(apr_bucket_alloc_t *list)
{
apr_allocator_t *allocator = list->allocator;
+
+ apr_pool_cleanup_kill(list->pool, list, alloc_cleanup);
apr_allocator_free(allocator, list->blocks);
apr_allocator_destroy(allocator);