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

ruby-changes:17681

From: ko1 <ko1@a...>
Date: Thu, 4 Nov 2010 21:07:07 +0900 (JST)
Subject: [ruby-changes:17681] Ruby:r29690 (trunk): * gc.c (rb_newobj): force garbage_collect() if GC.stress == true.

ko1	2010-11-04 21:06:08 +0900 (Thu, 04 Nov 2010)

  New Revision: 29690

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=29690

  Log:
    * gc.c (rb_newobj): force garbage_collect() if GC.stress == true.

  Modified files:
    trunk/ChangeLog
    trunk/gc.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 29689)
+++ ChangeLog	(revision 29690)
@@ -1,3 +1,7 @@
+Thu Nov  4 20:04:44 2010  Koichi Sasada  <ko1@a...>
+
+	* gc.c (rb_newobj): force garbage_collect() if GC.stress == true.
+
 Thu Nov  4 19:48:22 2010  Koichi Sasada  <ko1@a...>
 
 	* ChangeLog: missed to write a last ChangeLog.
Index: gc.c
===================================================================
--- gc.c	(revision 29689)
+++ gc.c	(revision 29690)
@@ -1042,12 +1042,26 @@
 
 #define RANY(o) ((RVALUE*)(o))
 
-static VALUE
-rb_newobj_from_heap(rb_objspace_t *objspace)
+VALUE
+rb_newobj(void)
 {
+    rb_objspace_t *objspace = &rb_objspace;
     VALUE obj;
 
-    if ((ruby_gc_stress && !ruby_disable_gc_stress) || !freelist) {
+    if (UNLIKELY(during_gc)) {
+	dont_gc = 1;
+	during_gc = 0;
+	rb_bug("object allocation during garbage collection phase");
+    }
+
+    if (UNLIKELY(ruby_gc_stress) && UNLIKELY(!ruby_disable_gc_stress)) {
+	if (!garbage_collect(objspace)) {
+	    during_gc = 0;
+	    rb_memerror();
+	}
+    }
+
+    if (UNLIKELY(!freelist)) {
 	if (!gc_lazy_sweep(objspace)) {
 	    during_gc = 0;
 	    rb_memerror();
@@ -1067,20 +1081,6 @@
     return obj;
 }
 
-VALUE
-rb_newobj(void)
-{
-    rb_objspace_t *objspace = &rb_objspace;
-
-    if (during_gc) {
-	dont_gc = 1;
-	during_gc = 0;
-	rb_bug("object allocation during garbage collection phase");
-    }
-
-    return rb_newobj_from_heap(objspace);
-}
-
 NODE*
 rb_node_newnode(enum node_type type, VALUE a0, VALUE a1, VALUE a2)
 {

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

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