なかだです。

以前から気になってはいたのですが、rb_class2name()の後でGCが起き
るとdangling pointerが発生する可能性があるような気がします。

あまりいい方法が思い付かないのですが、こんなのでどうでしょうか。


Index: variable.c =================================================================== RCS file: /pub/cvs/ruby/src/ruby/variable.c,v retrieving revision 1.80 diff -u -2 -p -r1.80 variable.c --- variable.c 18 Feb 2003 14:30:17 -0000 1.80 +++ variable.c 28 Mar 2003 09:05:03 -0000 @@ -157,7 +157,15 @@ classname(klass) } if (NIL_P(path)) { + ID tmppath = rb_intern("__tmp_classpath__"); + path = find_class_path(klass); if (NIL_P(path)) { - return 0; + if (!RCLASS(klass)->iv_tbl || + !st_lookup(RCLASS(klass)->iv_tbl, tmppath, &path)) { + return 0; + } + } + else if (RCLASS(klass)->iv_tbl) { + st_delete(RCLASS(klass)->iv_tbl, &tmppath, 0); } return path; @@ -200,4 +208,5 @@ rb_class_path(klass) sprintf(RSTRING(str)->ptr, "#<%s:0x%lx>", s, klass); RSTRING(str)->len = strlen(RSTRING(str)->ptr); + rb_iv_set(klass, "__tmp_classpath__", str); return str;
-- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦