summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenny Prijono <bennylp@teluu.com>2007-05-29 11:33:13 +0000
committerBenny Prijono <bennylp@teluu.com>2007-05-29 11:33:13 +0000
commit7a4c67e51902161c8011599f0d9a181e1aae2908 (patch)
tree3205d92dab2975984537395ba9b27f811749ef71
parent2618733248d984c629eeb313c80e084dd26531c6 (diff)
Fixed ticket #310: Memory alignment problem in pool_buf (thanks Esbjörn Dominique)
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@1316 74dad513-b988-da41-8d7b-12977e46ad98
-rw-r--r--pjlib/src/pj/pool_buf.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/pjlib/src/pj/pool_buf.c b/pjlib/src/pj/pool_buf.c
index 08885ea6..fbafec08 100644
--- a/pjlib/src/pj/pool_buf.c
+++ b/pjlib/src/pj/pool_buf.c
@@ -81,6 +81,7 @@ PJ_DEF(pj_pool_t*) pj_pool_create_on_buf(const char *name,
pj_size_t size)
{
struct creation_param param;
+ long align_diff;
PJ_ASSERT_RETURN(buf && size, NULL);
@@ -90,6 +91,14 @@ PJ_DEF(pj_pool_t*) pj_pool_create_on_buf(const char *name,
is_initialized = 1;
}
+ /* Check and align buffer */
+ align_diff = (long)buf;
+ if (align_diff & (PJ_POOL_ALIGNMENT-1)) {
+ align_diff &= (PJ_POOL_ALIGNMENT-1);
+ buf = (void*) (((char*)buf) + align_diff);
+ size -= align_diff;
+ }
+
param.stack_buf = buf;
param.size = size;
pj_thread_local_set(tls, &param);