You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@apr.apache.org by mt...@apache.org on 2009/04/02 18:31:54 UTC
svn commit: r761339 - /apr/apr/trunk/memory/unix/apr_pools.c
Author: mturk
Date: Thu Apr 2 16:31:54 2009
New Revision: 761339
URL: http://svn.apache.org/viewvc?rev=761339&view=rev
Log:
I stil think this implementation should go away...
Anyhow, no need to store the pointer to already linked list just to be able to
call the free on that pointer
Modified:
apr/apr/trunk/memory/unix/apr_pools.c
Modified: apr/apr/trunk/memory/unix/apr_pools.c
URL: http://svn.apache.org/viewvc/apr/apr/trunk/memory/unix/apr_pools.c?rev=761339&r1=761338&r2=761339&view=diff
==============================================================================
--- apr/apr/trunk/memory/unix/apr_pools.c (original)
+++ apr/apr/trunk/memory/unix/apr_pools.c Thu Apr 2 16:31:54 2009
@@ -540,6 +540,7 @@
static void run_cleanups(cleanup_t **c);
static void run_child_cleanups(cleanup_t **c);
+static void free_cleanups(cleanup_t **c);
static void free_proc_chain(struct process_chain *procs);
#if APR_POOL_DEBUG
@@ -724,6 +725,7 @@
/* Run pre destroy cleanups */
run_cleanups(&pool->pre_cleanups);
pool->pre_cleanups = NULL;
+ free_cleanups(&pool->free_pre_cleanups);
pool->free_pre_cleanups = NULL;
/* Destroy the subpools. The subpools will detach themselves from
@@ -735,6 +737,7 @@
/* Run cleanups */
run_cleanups(&pool->cleanups);
pool->cleanups = NULL;
+ free_cleanups(&pool->free_cleanups);
pool->free_cleanups = NULL;
/* Free subprocesses */
@@ -752,6 +755,7 @@
/* Run pre destroy cleanups */
run_cleanups(&pool->pre_cleanups);
pool->pre_cleanups = NULL;
+ free_cleanups(&pool->free_pre_cleanups);
pool->free_pre_cleanups = NULL;
/* Destroy the subpools. The subpools will detach themselve from
@@ -762,6 +766,7 @@
/* Run cleanups */
run_cleanups(&pool->cleanups);
+ free_cleanups(&pool->free_cleanups);
/* Free subprocesses */
free_proc_chain(pool->subprocesses);
@@ -786,6 +791,7 @@
block_list_destroy_all(pool->blocks);
run_cleanups(&pool->final_cleanups);
+ free_cleanups(&pool->final_cleanups);
block_list_destroy(&pool->final_block);
free(pool);
}
@@ -1849,7 +1855,7 @@
c = p->free_cleanups;
p->free_cleanups = c->next;
} else {
- c = apr_palloc(p, sizeof(cleanup_t));
+ c = malloc(sizeof(cleanup_t));
}
c->data = data;
c->plain_cleanup_fn = plain_cleanup_fn;
@@ -1874,7 +1880,7 @@
c = p->free_pre_cleanups;
p->free_pre_cleanups = c->next;
} else {
- c = apr_palloc(p, sizeof(cleanup_t));
+ c = malloc(sizeof(cleanup_t));
}
c->data = data;
c->plain_cleanup_fn = plain_cleanup_fn;
@@ -1984,6 +1990,18 @@
while (c) {
*cref = c->next;
(*c->plain_cleanup_fn)((void *)c->data);
+ free(c);
+ c = *cref;
+ }
+}
+
+static void free_cleanups(cleanup_t **cref)
+{
+ cleanup_t *c = *cref;
+
+ while (c) {
+ *cref = c->next;
+ free(c);
c = *cref;
}
}
@@ -1995,6 +2013,7 @@
while (c) {
*cref = c->next;
(*c->child_cleanup_fn)((void *)c->data);
+ free(c);
c = *cref;
}
}