なかだです。 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はできる。 中田 伸悦