Bug #842

endless loop of ObjectSpace.each_object

Added by authorNari (Narihiro Nakamura) over 3 years ago. Updated about 1 year ago.

[ruby-dev:37338]
Status:Rejected Start date:12/10/2008
Priority:Normal Due date:
Assignee:- % Done:

0%

Category:-
Target version:1.9.1 Release Candidate
ruby -v:

Description

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);
 }

History

Updated by yugui (Yuki Sonoda) over 3 years ago

  • Target version set to 1.9.1 Release Candidate

Updated by yugui (Yuki Sonoda) over 3 years ago

  • Status changed from Open to Rejected
@ Ruby開発会議

* each_object中に生成されたオブジェクトがeach_objectに出現するかどうかは不定
* 出現する場合、生成し続ければ終了しないケースがあることは仕様

Also available in: Atom PDF