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/