遠藤です。

2011年6月30日21:11 Narihiro Nakamura <authorNari / gmail.com>:
> もし、64KBのスタック領域でGCするのであれば、その情報を
> th->machine_stack_maxsize に設定しなければならないはずで、
> その辺りがうまくいってないのではないでしょうか。

私もその辺りを疑って puts デバッグしてみたんですが、stack_check() は
ちゃんと真になってるみたいです。ふしぎ。


diff --git a/gc.c b/gc.c
index d5b8dfd..577131c 100644
--- a/gc.c
+++ b/gc.c
@@ -1619,6 +1619,7 @@ gc_mark(rb_objspace_t *objspace, VALUE ptr, int lev)
 	    if (mark_stack_ptr - mark_stack < MARK_STACK_MAX) {
 		*mark_stack_ptr = ptr;
 		mark_stack_ptr++;
+		puts("push");
 	    }
 	    else {
 		mark_stack_overflow = 1;


$ ./ruby reduct.rb
push
push
push

*snip*

push
push
push
reduct.rb:114: [BUG] object allocation during garbage collection phase
ruby 1.9.3dev (2011-06-30 trunk 32300) [i686-linux]

-- 
Yusuke Endoh <mame / tsg.ne.jp>