Bug #842: endless loop of ObjectSpace.each_object
http://redmine.ruby-lang.org/issues/show/842
e$B5/I<<Te(B: Narihiro N.
e$B%9%F!<%?%9e(B: Open, e$BM%@hEYe(B: Normal
narie$B$G$9!%e(B
e$B0J2<$NMM$K$9$k$HL58B%k!<%W$KF~$j$^$9!%e(B
$ ./miniruby -v
ruby 1.9.1 (2008-12-10 revision 20602) [i686-linux]
$ ./miniruby -e “GC.disable; ObjectSpace.each_object{ String.new(‘a’) }”
e$B$3$l$,%P%0$J$N$+$I$&$+J,$+$j$^$;$s$G$7$?!%e(B
GC.disablee$B$J>uBV$G$NF0:n$G$9$N$GEvA3$H$$$($PEvA3$J$N$G$9$,!%!%e(B
e$B=$@5$9$k%Q%C%A$rE:IU$$$?$7$^$9$N$G!$$48!F$Dx$h$m$7$/$*4j$$$7$^$9!%e(B
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);
}