diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2012-05-07 07:20:50 -0700 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2012-05-07 07:20:50 -0700 |
| commit | b45c8b8d03db698c3df60dba95e8a446cb3c10c6 (patch) | |
| tree | a204d494e244a7515e51952876ddccdd10a31b27 /src/pool.c | |
| parent | e93a17ed785548fa342cd5b1652b88d610aa4fdd (diff) | |
| parent | f8e50025bf59275045dab9d1040bdd6e7f317f8d (diff) | |
| download | mruby-b45c8b8d03db698c3df60dba95e8a446cb3c10c6.tar.gz mruby-b45c8b8d03db698c3df60dba95e8a446cb3c10c6.zip | |
Merge pull request #87 from MobiRuby/pool_alloc_align
fixed #86 memory alignment error on ARM
Diffstat (limited to 'src/pool.c')
| -rw-r--r-- | src/pool.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/src/pool.c b/src/pool.c index 369953699..374bc19f9 100644 --- a/src/pool.c +++ b/src/pool.c @@ -17,6 +17,12 @@ #define POOL_PAGE_SIZE 16000 +#ifdef ALLOC_PADDING +# define CALC_ALIGN_PADDING(x) ((x % ALLOC_PADDING) ? ALLOC_PADDING - (x % ALLOC_PADDING) : 0) +#else +# define CALC_ALIGN_PADDING(x) (0) +#endif + mrb_pool* mrb_pool_open(mrb_state *mrb) { @@ -68,7 +74,7 @@ mrb_pool_alloc(mrb_pool *pool, size_t len) size_t n; if (!pool) return 0; - + len += CALC_ALIGN_PADDING(len); page = pool->pages; while (page) { if (page->offset + len <= page->len) { @@ -95,6 +101,7 @@ mrb_pool_can_realloc(mrb_pool *pool, void *p, size_t len) struct mrb_pool_page *page; if (!pool) return 0; + len += CALC_ALIGN_PADDING(len); page = pool->pages; while (page) { if (page->last == p) { @@ -116,6 +123,8 @@ mrb_pool_realloc(mrb_pool *pool, void *p, size_t oldlen, size_t newlen) void *np; if (!pool) return 0; + oldlen += CALC_ALIGN_PADDING(oldlen); + newlen += CALC_ALIGN_PADDING(newlen); page = pool->pages; while (page) { if (page->last == p) { |
