ruby-changes:20056
From: kosaki <ko1@a...>
Date: Wed, 15 Jun 2011 23:35:55 +0900 (JST)
Subject: [ruby-changes:20056] kosaki:r32103 (trunk): * gc.c: fix a regression by r31690 on AIX because AIX malloc
kosaki 2011-06-15 23:35:46 +0900 (Wed, 15 Jun 2011) New Revision: 32103 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=32103 Log: * gc.c: fix a regression by r31690 on AIX because AIX malloc return NULL if it's passed 0. But some caller don't expect it. patch by Yutaka Kanemoto. (vm_malloc_prepare): return calculated size. (vm_xmalloc): use above result. (vm_xcalloc): ditto. Modified files: trunk/ChangeLog trunk/gc.c Index: ChangeLog =================================================================== --- ChangeLog (revision 32102) +++ ChangeLog (revision 32103) @@ -1,3 +1,12 @@ +Wed Jun 15 23:30:45 2011 KOSAKI Motohiro <kosaki.motohiro@g...> + + * gc.c: fix a regression by r31690 on AIX because AIX malloc + return NULL if it's passed 0. But some caller don't expect it. + patch by Yutaka Kanemoto. + (vm_malloc_prepare): return calculated size. + (vm_xmalloc): use above result. + (vm_xcalloc): ditto. + Wed Jun 15 23:11:35 2011 KOSAKI Motohiro <kosaki.motohiro@g...> * thread.c: remove BLOCKING_REGION_CORE() macro. It's no longer used Index: gc.c =================================================================== --- gc.c (revision 32102) +++ gc.c (revision 32103) @@ -711,7 +711,7 @@ static void vm_xfree(rb_objspace_t *objspace, void *ptr); -static inline void +static inline size_t vm_malloc_prepare(rb_objspace_t *objspace, size_t size) { if ((ssize_t)size < 0) { @@ -727,6 +727,8 @@ (malloc_increase+size) > malloc_limit) { garbage_collect_with_gvl(objspace); } + + return size; } static inline void * @@ -757,7 +759,7 @@ { void *mem; - vm_malloc_prepare(objspace, size); + size = vm_malloc_prepare(objspace, size); TRY_WITH_GC(mem = malloc(size)); return vm_malloc_fixup(objspace, mem, size); } @@ -844,10 +846,12 @@ vm_xcalloc(rb_objspace_t *objspace, size_t count, size_t elsize) { void *mem; - const size_t size = xmalloc2_size(count, elsize); + size_t size; - vm_malloc_prepare(objspace, size); - TRY_WITH_GC(mem = calloc(count, elsize)); + size = xmalloc2_size(count, elsize); + size = vm_malloc_prepare(objspace, size); + + TRY_WITH_GC(mem = calloc(1, size)); return vm_malloc_fixup(objspace, mem, size); } -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/