diff options
author | Benny Prijono <bennylp@teluu.com> | 2007-06-01 07:26:21 +0000 |
---|---|---|
committer | Benny Prijono <bennylp@teluu.com> | 2007-06-01 07:26:21 +0000 |
commit | 411ab3b5701824a5e2806117049952f5ad2654aa (patch) | |
tree | 490a69dafe78baf27a8878a4a986d95804298f05 /pjlib/src/pj/pool_policy_malloc.c | |
parent | 01ab9abb169648315c02118e3b6cc3747f639e2e (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.c | 17 |
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); } |