Skip to content

Commit

Permalink
* gc.c (aligned_malloc, aligned_free): added fallback implementations
Browse files Browse the repository at this point in the history
  for platforms like OSX Leopard.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@35083 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
  • Loading branch information
yugui committed Mar 18, 2012
1 parent 3175fbf commit 1d006f3
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 2 deletions.
5 changes: 5 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
Sun Mar 18 18:31:45 2012 Yuki Sonoda (Yugui) <yugui@yugui.jp>

* gc.c (aligned_malloc, aligned_free): added fallback implementations
for platforms like OSX Leopard.

Sun Mar 18 17:17:48 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>

* bignum.c (rb_big_pow): estimate result bit size more precisely.
Expand Down
17 changes: 15 additions & 2 deletions gc.c
Original file line number Diff line number Diff line change
Expand Up @@ -1106,7 +1106,18 @@ aligned_malloc(size_t alignment, size_t size)
#elif defined(HAVE_MEMALIGN)
res = memalign(alignment, size);
#else
#error no memalign function
char* aligned;
res = malloc(alignment + size + sizeof(void*));
aligned = (char*)res + alignment + sizeof(void*);
aligned -= ((VALUE)aligned & (alignment - 1));
((void**)aligned)[-1] = res;
res = (void*)aligned;
#endif

#if defined(_DEBUG) || defined(GC_DEBUG)
/* alignment must be a power of 2 */
assert((alignment - 1) & alignment == 0);
assert(alignment % sizeof(void*) == 0);
#endif
return res;
}
Expand All @@ -1118,8 +1129,10 @@ aligned_free(void *ptr)
__mingw_aligned_free(ptr);
#elif defined _WIN32 && !defined __CYGWIN__
_aligned_free(ptr);
#else
#elif defined(HAVE_MEMALIGN) && defined(HAVE_POSIX_MEMALIGN)
free(ptr);
#else
free(((void**)ptr)[-1]);
#endif
}

Expand Down

0 comments on commit 1d006f3

Please sign in to comment.