diff options
author | Benny Prijono <bennylp@teluu.com> | 2010-01-29 11:20:43 +0000 |
---|---|---|
committer | Benny Prijono <bennylp@teluu.com> | 2010-01-29 11:20:43 +0000 |
commit | f3d584101fb40816718221330df4a729080340f9 (patch) | |
tree | 6e72ab8abaea21fd2da18b45e23008f9c880e132 /pjlib/src/pj/pool.c | |
parent | 8e54a92b6eb6302761fd9a1949086baa26e0007a (diff) |
More ticket #1037:
- bug in aligning pointer if sizeof(long) is less than sizeof(void*). Thanks John Ridges for pointing this out
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@3082 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjlib/src/pj/pool.c')
-rw-r--r-- | pjlib/src/pj/pool.c | 15 |
1 files changed, 5 insertions, 10 deletions
diff --git a/pjlib/src/pj/pool.c b/pjlib/src/pj/pool.c index 22df21c6..800b86c6 100644 --- a/pjlib/src/pj/pool.c +++ b/pjlib/src/pj/pool.c @@ -31,7 +31,8 @@ # include <pj/pool_i.h> #endif -#define LOG(expr) PJ_LOG(6,expr) +#define LOG(expr) PJ_LOG(6,expr) +#define ALIGN_PTR(PTR,ALIGNMENT) (PTR + (-(long)(PTR) & (ALIGNMENT-1))) PJ_DEF_DATA(int) PJ_NO_MEMORY_EXCEPTION; @@ -71,9 +72,7 @@ static pj_pool_block *pj_pool_create_block( pj_pool_t *pool, pj_size_t size) block->end = ((unsigned char*)block) + size; /* Set the start pointer, aligning it as needed */ - block->cur = (unsigned char*) - (((unsigned long)block->buf + PJ_POOL_ALIGNMENT - 1) & - ~(PJ_POOL_ALIGNMENT - 1)); + block->cur = ALIGN_PTR(block->buf, PJ_POOL_ALIGNMENT); /* Insert in the front of the list. */ pj_list_insert_after(&pool->block_list, block); @@ -216,9 +215,7 @@ PJ_DEF(pj_pool_t*) pj_pool_create_int( pj_pool_factory *f, const char *name, block->end = buffer + initial_size; /* Set the start pointer, aligning it as needed */ - block->cur = (unsigned char*) - (((unsigned long)block->buf + PJ_POOL_ALIGNMENT - 1) & - ~(PJ_POOL_ALIGNMENT - 1)); + block->cur = ALIGN_PTR(block->buf, PJ_POOL_ALIGNMENT); pj_list_insert_after(&pool->block_list, block); @@ -262,9 +259,7 @@ static void reset_pool(pj_pool_t *pool) block = pool->block_list.next; /* Set the start pointer, aligning it as needed */ - block->cur = (unsigned char*) - (((unsigned long)block->buf + PJ_POOL_ALIGNMENT - 1) & - ~(PJ_POOL_ALIGNMENT - 1)); + block->cur = ALIGN_PTR(block->buf, PJ_POOL_ALIGNMENT); pool->capacity = block->end - (unsigned char*)pool; } |