なかだです。

At Mon, 16 Dec 2002 13:16:28 +0900,
Yukihiro Matsumoto wrote:
> |> [ruby-talk:59035]によればfreebsd 4.7 stableではRubyがコアダ
> |> ンプするそうです。当該プラットフォームをお持ちの方は追試して
> |> いただけませんか?
> |
> |1.6 の先端で core を吐きますね。
> 
> ありがとうございます。やっぱりバグってるのね(泣)。
> しかし、落ちてるのは
> 
>     return rb_yield_0(val, 0, 0, 0);
> 
> というおおよそ問題が起きそうにない場所なんですが、なにがいけ
> ないんですかねえ。

私の試したところでは、ruby_dyna_varsが途中でおかしくなってるよ
うで、eval.c:3696のwhileで落ちました。

3693	if (ruby_dyna_vars->id == 0) {
3694	    vars = ruby_dyna_vars->next;
3695	    rb_gc_force_recycle((VALUE)ruby_dyna_vars);
3696	    while (vars && vars->id != 0) {
3697		struct RVarmap *tmp = vars->next;
3698		rb_gc_force_recycle((VALUE)vars);
3699		vars = tmp;
3700	    }
3701	}

[ruby-talk:59134]でGuyも指摘してる通り、根は[ruby-talk:40979]と
同じでしょう。ちなみに、[ruby-core:00112]に添付したtc_evstr.rb
のtest_bug2がフリーズするのも、一緒だと思います。


Index: eval.c =================================================================== RCS file: /cvs/ruby/src/ruby/eval.c,v retrieving revision 1.137.2.141 diff -u -2 -p -w -r1.137.2.141 eval.c --- eval.c 2 Dec 2002 18:19:02 -0000 1.137.2.141 +++ eval.c 16 Dec 2002 06:01:42 -0000 @@ -2902,4 +2902,5 @@ rb_eval(self, n) str = rb_str_new3(node->nd_lit); + if (!ruby_dyna_vars) rb_dvar_push(0, 0); while (list) { if (list->nd_head) { @@ -2913,5 +2914,4 @@ rb_eval(self, n) ruby_sourceline = nd_line(list->nd_head); ruby_in_eval++; - if (!ruby_dyna_vars) rb_dvar_push(0, 0); list->nd_head = compile(list->nd_head->nd_lit, ruby_sourcefile,
-- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦