[#20227] dyna_vars problem? — Tanaka Akira <akr@...17n.org>

しばらく前から、稀に Ruby が core を吐くという問題を追いかけているので

15 messages 2003/05/19
[#20234] Re: dyna_vars problem? — matz@... (Yukihiro Matsumoto) 2003/05/19

まつもと ゆきひろです

[#20236] Re: dyna_vars problem? — Tanaka Akira <akr@...17n.org> 2003/05/19

In article <1053363181.529491.30320.nullmailer@picachu.netlab.jp>,

[ruby-dev:20234] Re: dyna_vars problem?

From: matz@... (Yukihiro Matsumoto)
Date: 2003-05-19 16:53:11 UTC
List: ruby-dev #20234
まつもと ゆきひろです

In message "[ruby-dev:20227] dyna_vars problem?"
    on 03/05/19, Tanaka Akira <akr@m17n.org> writes:

|まず、次のような表明は正しいでしょうか?
|
|Index: eval.c
|===================================================================
|RCS file: /src/ruby/eval.c,v
|retrieving revision 1.433
|diff -u -r1.433 eval.c
|--- eval.c	19 May 2003 05:41:07 -0000	1.433
|+++ eval.c	19 May 2003 12:17:37 -0000
|@@ -12,6 +12,7 @@
| 
| **********************************************************************/
| 
|+#include <assert.h>
| #include "ruby.h"
| #include "node.h"
| #include "env.h"
|@@ -8423,6 +8424,9 @@
| 
|     /* context switch */
|     if (curr == curr_thread) {
|+        struct RVarmap * volatile v;
|+        for (v = curr->dyna_vars; v; v = v->next)
|+          assert(TYPE(v) == T_VARMAP);
| 	if (THREAD_SAVE_CONTEXT(curr)) {
| 	    return;
| 	}
|
|たぶん、正しいと思うんですが、正しいとすると、これを破るようなスクリプ
|トが書けます。後につけますが、それを実行すると、上記の表明が次のように
|破れることがあります。

正しくないと思います。ここはTHREAD_SAVE_CONTEXTの直前ですか
ら、currの状態は前回保存した過去の状態です。dyna_varsは途中
でrb_gc_force_recycle()される可能性がありますから、回収され
たゴミを指している可能性はあります。

dyna_varsに関する問題があるにしても、それはここではないので
はないかと。

In This Thread