diff options
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); } |