summaryrefslogtreecommitdiff
path: root/pjlib/src/pj/pool_caching.c
diff options
context:
space:
mode:
authorBenny Prijono <bennylp@teluu.com>2007-06-01 07:26:21 +0000
committerBenny Prijono <bennylp@teluu.com>2007-06-01 07:26:21 +0000
commit411ab3b5701824a5e2806117049952f5ad2654aa (patch)
tree490a69dafe78baf27a8878a4a986d95804298f05 /pjlib/src/pj/pool_caching.c
parent01ab9abb169648315c02118e3b6cc3747f639e2e (diff)
Implement ticket #314: Added PJ_SAFE_POOL configuration in PJLIB to track down memory corruptions
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@1333 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjlib/src/pj/pool_caching.c')
-rw-r--r--pjlib/src/pj/pool_caching.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/pjlib/src/pj/pool_caching.c b/pjlib/src/pj/pool_caching.c
index b00bf108..01c303d6 100644
--- a/pjlib/src/pj/pool_caching.c
+++ b/pjlib/src/pj/pool_caching.c
@@ -99,6 +99,8 @@ PJ_DEF(void) pj_caching_pool_destroy( pj_caching_pool *cp )
while (pool != (pj_pool_t*) &cp->used_list) {
pj_pool_t *next = pool->next;
pj_list_erase(pool);
+ PJ_LOG(4,(pool->obj_name,
+ "Pool is not released by application, releasing now"));
pj_pool_destroy_int(pool);
pool = next;
}
@@ -197,8 +199,18 @@ static void cpool_release_pool( pj_pool_factory *pf, pj_pool_t *pool)
PJ_CHECK_STACK();
+ PJ_ASSERT_ON_FAIL(pf && pool, return);
+
pj_lock_acquire(cp->lock);
+#if PJ_SAFE_POOL
+ /* Make sure pool is still in our used list */
+ if (pj_list_find_node(&cp->used_list, pool) != pool) {
+ pj_assert(!"Attempt to destroy pool that has been destroyed before");
+ return;
+ }
+#endif
+
/* Erase from the used list. */
pj_list_erase(pool);