summaryrefslogtreecommitdiff
path: root/pjlib/src/pj/pool_policy_malloc.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_policy_malloc.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_policy_malloc.c')
-rw-r--r--pjlib/src/pj/pool_policy_malloc.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/pjlib/src/pj/pool_policy_malloc.c b/pjlib/src/pj/pool_policy_malloc.c
index d3f282da..d7e8ad1f 100644
--- a/pjlib/src/pj/pool_policy_malloc.c
+++ b/pjlib/src/pj/pool_policy_malloc.c
@@ -26,6 +26,7 @@
/*
* This file contains pool default policy definition and implementation.
*/
+#include "pool_signature.h"
static void *default_block_alloc(pj_pool_factory *factory, pj_size_t size)
@@ -41,11 +42,16 @@ static void *default_block_alloc(pj_pool_factory *factory, pj_size_t size)
return NULL;
}
- p = malloc(size);
+ p = malloc(size+(SIG_SIZE << 1));
if (p == NULL) {
if (factory->on_block_free)
factory->on_block_free(factory, size);
+ } else {
+ /* Apply signature when PJ_SAFE_POOL is set. It will move
+ * "p" pointer forward.
+ */
+ APPLY_SIG(p, size);
}
return p;
@@ -59,6 +65,15 @@ static void default_block_free(pj_pool_factory *factory, void *mem,
if (factory->on_block_free)
factory->on_block_free(factory, size);
+ /* Check and remove signature when PJ_SAFE_POOL is set. It will
+ * move "mem" pointer backward.
+ */
+ REMOVE_SIG(mem, size);
+
+ /* Note that when PJ_SAFE_POOL is set, the actual size of the block
+ * is size + SIG_SIZE*2.
+ */
+
free(mem);
}