From: Narihiro Nakamura Date: 2008-12-10T10:57:39+09:00 Subject: [ruby-dev:37338] [Bug #842] endless loop of ObjectSpace.each_object Bug #842: endless loop of ObjectSpace.each_object http://redmine.ruby-lang.org/issues/show/842 起票者: Narihiro Nakamura ステータス: Open, 優先度: Normal nariです. 以下の様にすると無限ループに入ります. $ ./miniruby -v ruby 1.9.1 (2008-12-10 revision 20602) [i686-linux] $ ./miniruby -e "GC.disable; ObjectSpace.each_object{ String.new('a') }" これがバグなのかどうか分かりませんでした. GC.disableな状態での動作ですので当然といえば当然なのですが.. 修正するパッチを添付いたしますので,ご検討程よろしくお願いします. Index: gc.c =================================================================== --- gc.c (revision 20602) +++ gc.c (working copy) @@ -2089,7 +2089,9 @@ RVALUE *membase = 0; RVALUE *p, *pend; volatile VALUE v; + int old_dont_gc = dont_gc; + if (old_dont_gc) dont_gc = Qfalse; i = 0; while (i < heaps_used) { while (0 < i && (uintptr_t)membase < (uintptr_t)heaps[i-1].membase) @@ -2123,6 +2125,7 @@ } } + dont_gc = old_dont_gc; return SIZET2NUM(n); } ---------------------------------------- http://redmine.ruby-lang.org