[#23168] File.fnmatch のリファクタリング — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>

山本です。

13 messages 2004/03/08

[#23192] File.fnmatch と Dir.glob の非互換部分 — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>

山本です。

19 messages 2004/03/13
[#23194] Re: File.fnmatch と Dir.glob の非互換部分 — matz@... (Yukihiro Matsumoto) 2004/03/13

まつもと ゆきひろです

[#23195] Re: File.fnmatch とDir.glob の非互換部分 — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/03/14

山本です。

[#23196] Re: File.fnmatch とDir.glob の非互換部分 — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/03/14

山本です。

[#23260] Re: File.fnmatch とDir.glob の非互換部分 — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/03/30

山本です。

[#23261] Re: File.fnmatch とDir.glob の非互換部分 — matz@... (Yukihiro Matsumoto) 2004/03/30

まつもと ゆきひろです

[#23265] Re: File.fnmatch とDir.glob の非互換部分 — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/03/30

山本です。

[#23238] Re: [ruby-cvs] ruby, ruby/lib, ruby/lib/rss, ruby/sample/openssl: * lib/logger.rb: trim tail space of each line. no user visible change. — Kouhei Sutou <kou@...>

須藤です.

10 messages 2004/03/27

[ruby-dev:23102] Re: pthread-enabled ruby receives SEGV when requiring a large library on gdb

From: Hidetoshi NAGAI <nagai@...>
Date: 2004-03-02 04:28:07 UTC
List: ruby-dev #23102
永井@知能.九工大です.

結論から言うと,

「 Ruby 側の原因ではないのでどうしようもない 」

なのですが,他の人が同じような穴に落ちないように,
参考までにレポートしておきます.

From: Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
Subject: [ruby-dev:23074] pthread-enabled ruby receives SEGV when requiring a large library on gdb
Date: Mon, 1 Mar 2004 00:23:30 +0900
Message-ID: <20040301.002328.71112369.nagai@ai.kyutech.ac.jp>
> 表題の通り,pthread-enable な ruby を gdb 上で動かした際に
> 大きなライブラリを require すると Segmentation fault で
> 止ってしまいます.
> gdb 上でなければ,そのライブラリは正常に読み込まれます.

gdb から動かしたときに,gc.c の 360 行
--------------------------------------
    heap_slots *= 1.8;
--------------------------------------
の結果がおかしくなるのが原因のようです.
この式の直前の heap_slots の値が 10000 (0x2710) の時,
この式の直後に 18000 (0x4650) となるはずが
奇妙なことに -2147483648 (0x80000000) となってました.
念のため,
--------------------------------------
    heap_slots = (int)(heap_slots * 1.8);
--------------------------------------
としても同じです.
ところが,この行の直前に
--------------------------------------
    fprintf(stderr, "heap_slots %d * 1.8 = %d\n", heap_slots, (int)(heap_slots * 1.8));
--------------------------------------
という行を加えると,表示では
--------------------------------------
heap_slots 10000 * 1.8 = -2147483648
--------------------------------------
などとなりますが,その後の heap_slots *= 1.8 の後の 
heap_slots の値は 18000 と正しい値になっています.(^_^;
この fprintf の代りに
--------------------------------------
    { int tmp = (int)(heap_slots * 1.8); }
--------------------------------------
を入れるなども試したのですが,print out しない限りはダメなようです.
ゴミが出力されるのはうっとおしいですが,fprintf を追加することで
当座をしのいでおこうと思います.
-- 
                                         永井 秀利 (九工大 知能情報)
                                             nagai@ai.kyutech.ac.jp

In This Thread

Prev Next