[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]