[#19457] equality between "a" and Exception.new("a") — Tanaka Akira <akr@...17n.org>

ふと気がついたのですが、

39 messages 2003/02/02
[#19460] Re: equality between "a" and Exception.new("a") — matz@... (Yukihiro Matsumoto) 2003/02/03

まつもと ゆきひろです

[#19473] Re: equality between "a" and Exception.new("a") — Tanaka Akira <akr@...17n.org> 2003/02/04

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

[#19474] Re: equality between "a" and Exception.new("a") — matz@... (Yukihiro Matsumoto) 2003/02/04

まつもと ゆきひろです

[#19475] Re: equality between "a" and Exception.new("a") — Tanaka Akira <akr@...17n.org> 2003/02/04

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

[#19476] Re: equality between "a" and Exception.new("a") — matz@... (Yukihiro Matsumoto) 2003/02/04

まつもと ゆきひろです

[#19477] Re: equality between "a" and Exception.new("a") — Tanaka Akira <akr@...17n.org> 2003/02/04

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

[#19478] Re: equality between "a" and Exception.new("a") — matz@... (Yukihiro Matsumoto) 2003/02/04

まつもと ゆきひろです

[#19479] Re: equality between "a" and Exception.new("a") — Tanaka Akira <akr@...17n.org> 2003/02/04

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

[#19482] Re: equality between "a" and Exception.new("a") — matz@... (Yukihiro Matsumoto) 2003/02/04

まつもと ゆきひろです

[#19486] Re: equality between "a" and Exception.new("a") — Tanaka Akira <akr@...17n.org> 2003/02/04

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

[#19491] Re: equality between "a" and Exception.new("a") — matz@... (Yukihiro Matsumoto) 2003/02/04

まつもと ゆきひろです

[#19493] Re: equality between "a" and Exception.new("a") — matz@... (Yukihiro Matsumoto) 2003/02/04

まつもと ゆきひろです

[#19556] compare between String and Exception — Tanaka Akira <akr@...17n.org> 2003/02/12

さらに気が付いたのですが、

[#19514] [Oniguruma] Version 1.7.1 — "K.Kosako" <kosako@...>

ftp.ruby-lang.orgに、onigd20030207.tar.gzを置きました。

19 messages 2003/02/07

[#19548] [PATCH] file.c for (PR#389) and (PR#390) — nobu.nakada@...

なかだです。

20 messages 2003/02/11
[#19572] Re: [PATCH] file.c for (PR#389) and (PR#390) — pegacorn@... 2003/02/14

From: nobu.nakada@nifty.ne.jp

[#19648] Re: SEGV at search_method in eval.c (PR#400) — nobu.nakada@...

なかだです。

13 messages 2003/02/24

[ruby-dev:19661] Re: SEGV at search_method in eval.c (PR#400)

From: nobu.nakada@...
Date: 2003-02-25 13:15:47 UTC
List: ruby-dev #19661
なかだです。

At Tue, 25 Feb 2003 16:34:54 +0900,
NAKAMURA, Hiroshi <nakahiro@sarion.co.jp> wrote:
> (gdb) p *tbl
> $1 = {type = 0x400a9e00, num_bins = 11, num_entries = 4, bins = 0x90df4d8}
> (gdb) x/11 tbl->bins
> 0x90df4d8:      0x00000000      0x08d96b58      0x091091c0      0x00000000
> 0x90df4e8:      0x08cdaac8      0x00000000      0x00000000      0x00000000
> 0x90df4f8:      0x00000000      0x0813bce8      0x00000000
> (gdb) p *tbl->bins[1]
> $2 = {hash = 10858, key = 0x2a6a <Address 0x2a6a out of bounds>, 
>   record = 0x40447b44 "?\200", next = 0x0}
> (gdb) p *tbl->bins[2]
> $3 = {hash = 10122, key = 0x278a <Address 0x278a out of bounds>, 
>   record = 0x4 <Address 0x4 out of bounds>, next = 0x0}
> (gdb) p *tbl->bins[4]
> $4 = {hash = 10850, key = 0x2a62 <Address 0x2a62 out of bounds>, 
>   record = 0x4 <Address 0x4 out of bounds>, next = 0x0}
> (gdb) p *tbl->bins[9]
> $5 = {hash = 10866, key = 0x2a72 <Address 0x2a72 out of bounds>, 
>   record = 0x40447b08 "\a", next = 0x0}

これは正しそうに見えます。やはりgeneric_ivar_tbl自体は正しいも
のの、そこから参照されるインスタンス変数がマークされていないと
見るべきでしょう。実際gc.c:rb_gc_mark()ではFL_EXIVARがセットさ
れているときだけマークしていますが、このStringではフラグがセッ
トされていないことが問題のようです。

    if (FL_TEST(obj, FL_EXIVAR)) {
	rb_mark_generic_ivar((VALUE)obj);
    }

> (gdb) p *(struct RString *)obj
> $4 = {basic = {flags = 7, klass = 1076034740}, len = 10,
>   ptr = 0x81b9b30 "yield_call", orig = 0}

ということでgeneric_ivar_tblとFL_EXIVARで探して行くと、ここがあ
やしそうです。


Index: variable.c
===================================================================
RCS file: //sharui/cvs/ruby/src/ruby/variable.c,v
retrieving revision 1.29.2.21
diff -u -2 -p -r1.29.2.21 variable.c
--- variable.c	16 Dec 2002 07:36:14 -0000	1.29.2.21
+++ variable.c	25 Feb 2003 13:15:17 -0000
@@ -913,4 +913,5 @@ rb_clone_generic_ivar(clone, obj)
     if (!generic_iv_tbl) return;
     if (st_lookup(generic_iv_tbl, obj, &tbl)) {
+	FL_SET(clone, FL_EXIVAR);
 	st_add_direct(generic_iv_tbl, clone, st_copy(tbl));
     }


-- 
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
    中田 伸悦

In This Thread