[#25010] test_flush fails. — "URABE Shyouhei aka.mput" <root@...>
mput です。以下のように test_flush が失敗します。
[#25031] Method#to_proc とブロックの引渡し — Masahiro Sakai (酒井政裕) <sakai@...>
酒井といいます。
[#25035] 拡張ライブラリへの共有ライブラリのPATHの埋め込み — Takahiro Kambe <taca@...>
こんにちは。
なかだです。
In message <200412060607.iB667giF007533@sharui.nakada.niregi.kanuma.tochigi.jp>
なかだです。
In message <200412070015.iB70FAiF012770@sharui.nakada.niregi.kanuma.tochigi.jp>
2004-12-07 (火) の 12:27 +0900 に Takahiro Kambe さんは書きました:
こんにちは、なかむら(う)です。
In message <1102395885.21598.19.camel@rice.p.arika.org>
なかだです。
In message <200412071613.iB7GD2r4007918@sharui.nakada.niregi.kanuma.tochigi.jp>
[#25041] temporal locking already locked string on simultaneous write — Tanaka Akira <akr@...17n.org>
同じ文字列をほぼ同時に IO に書き込むと、temporal locking already
まつもと ゆきひろです
In article <1102133507.339625.10453.nullmailer@x31.priv.netlab.jp>,
In article <1102176395.383559.21204.nullmailer@x31.priv.netlab.jp>,
まつもと ゆきひろです
Tietew です。
[#25054] rexml — Takahiro Kambe <taca@...>
こんばんは。
なかだです。
In message <200412051451.iB5EpYiF009060@sharui.nakada.niregi.kanuma.tochigi.jp>
まつもと ゆきひろです
In message <1102290330.040938.1210.nullmailer@x31.priv.netlab.jp>
[#25096] double free problem — "Akinori MUSHA" <knu@...>
ご無沙汰しております。
Hi,
In article <1102401703.030252.2480.nullmailer@x31.priv.netlab.jp>,
まつもと ゆきひろです
Yukihiro Matsumoto wrote:
Yukihiro Matsumoto wrote:
In article <41BEF768.7030008@ttsky.net>,
Tanaka Akira wrote:
[#25101] non-stdio buffering — Tanaka Akira <akr@...17n.org>
えぇと、今回 1.9 でなにが起きたのかを私が把握している範囲でまとめてお
こんにちは、なかむら(う)です。
In article <20041208.033521.635728872.gotoyuzo@sawara.does.notwork.org>,
[#25103] ruby_xrealloc dumps core — Tietew <tietew-ml-ruby-dev@...>
Tietew です。
[#25134] Set/test_eq failed on Tru64UNIX — Minero Aoki <aamine@...>
青木です。
なかだです。
まつもと ゆきひろです
[#25152] 1.8 reopen problem with duplex popen — Tanaka Akira <akr@...17n.org>
次のように、1.8 で双方向 popen な IO を reopen するとエラーになること
なかだです。
In article <200412110142.iBB1gDIh004622@sharui.nakada.niregi.kanuma.tochigi.jp>,
なかだです。
わたなべです。
In article <41-Tue21Dec2004123451+0900-eban@os.rim.or.jp>,
[#25158] core dump on NetBSD 2.0 — Tanaka Akira <akr@...17n.org>
NetBSD 2.0 で次のようにすると core を吐きます。
In article <87hdmsivva.fsf@serein.a02.aist.go.jp>,
In article <87ekhwiv7g.fsf@serein.a02.aist.go.jp>,
なかだです。
In article <200412130040.iBD0e8Qh003275@sharui.nakada.niregi.kanuma.tochigi.jp>,
まつもと ゆきひろです
In article <1102906796.625997.23964.nullmailer@x31.priv.netlab.jp>,
前田です。
In article <41BD40DC.6030706@ruby-lang.org>,
まつもと ゆきひろです
[#25160] ripper in snapshot.tar.gz — Tanaka Akira <akr@...17n.org>
ふと、とある autoconf も bison も入っていない環境で Ruby をコンパイル
[#25193] 1.8.2 release schedule — Yukihiro Matsumoto <matz@...>
まつもと ゆきひろです
[#25226] Zlib::Deflate.deflate dumps core — Tanaka Akira <akr@...17n.org>
次のようにすると core を吐きます。
[#25236] BSD/OS rlim_t — OHARA Shigeki <os@...>
大原です。
[#25252] core dump if local_append_gen invokes GC — Tanaka Akira <akr@...17n.org>
先程 1.9 を make test-all したところ、
[#25270] BSD/OS LDSHARED — OHARA Shigeki <os@...>
大原です。
[#25283] 1.8.2 preview4 — Yukihiro Matsumoto <matz@...>
Hello,
[#25292] tkutil is installed on no tcl/tk environment — Tanaka Akira <akr@...17n.org>
ふと気がついたのですが、Tcl/Tk が入っていない環境でも、tkutil は
[#25299] Re: リリース準備 — Yukihiro Matsumoto <matz@...>
まつもと ゆきひろです
高橋征義です。
山本です。
小西 弘将です。
山本です。
山本です。
山本です。
永井@知能.九工大です.
[#25302] test_readline.rb blocks on BSD again — GOTOU Yuuzou <gotoyuzo@...>
In message <20041223175402.3116FC6718@lithium.ruby-lang.org>,
In message <20041224.131211.846943951.gotoyuzo@sawara.does.notwork.org>,
まつもと ゆきひろです
わたなべです。
In message <20041225140050.378109.eban@os.rim.or.jp>,
なかだです。
In article <200412251620.iBPGK1xA009288@sharui.nakada.niregi.kanuma.tochigi.jp>,
なかだです。
In article <200412260300.iBQ3038u005055@sharui.nakada.niregi.kanuma.tochigi.jp>,
[#25336] webrick/httpauth.rb must require 'base64' — sheepman <sheepman@...>
こんにちは、sheepman です。
[#25341] String#center dumps core — Tanaka Akira <akr@...17n.org>
次のようにすると core を吐きます。
なかだです。
[#25342] 1.9.0でbcc版がコンパイルできない — 小西 弘将 <konishih@...6.so-net.ne.jp>
小西 弘将です。
山本です。
[#25365] method(:p).to_proc.call([]) — Masahiro Sakai (酒井政裕) <sakai@...>
酒井です。
[#25370] FileUtils.copy_stream on nonblocking IO — Tanaka Akira <akr@...17n.org>
FileUtils.copy_stream を nonblocking な IO に対して使うと、次のように
[ruby-dev:25163] Re: core dump on NetBSD 2.0
In article <87ekhwiv7g.fsf@serein.a02.aist.go.jp>,
Tanaka Akira <akr@m17n.org> writes:
> 得られた知見から、GNU/Linux でも次の変更を行うと怪しげなことが起こるはずです。
> というわけで試してみると、やはり変なことが起こります。
これどうやら別の話なようです。
NetBSD の gcc 3.3.3 の問題を再現させるには次のパッチで可能なようです。
([yarv-dev:366] が参考になりました、ってゆーかこんんなことできたんです
ね)
Index: gc.c
===================================================================
RCS file: /src/ruby/gc.c,v
retrieving revision 1.192
diff -u -p -r1.192 gc.c
--- gc.c 10 Nov 2004 07:16:24 -0000 1.192
+++ gc.c 12 Dec 2004 17:34:57 -0000
@@ -1291,6 +1291,7 @@ garbage_collect()
struct gc_list *list;
struct FRAME * volatile frame; /* gcc 2.7.2.3 -O2 bug?? */
jmp_buf save_regs_gc_mark;
+ register int _during_gc asm("esi");
SET_STACK_END;
#ifdef HAVE_NATIVETHREAD
@@ -1298,7 +1299,8 @@ garbage_collect()
rb_bug("cross-thread violation on rb_gc()");
}
#endif
- if (dont_gc || during_gc) {
+ _during_gc = during_gc;
+ if (dont_gc || _during_gc) {
if (!freelist) {
add_heap();
}
% ./ruby test/runner.rb test/rss
Loaded suite rss
Started
...................E....................................................................................
Finished in 4.498391 seconds.
1) Error:
test_parser(RSS::TestDublinCore):
NotImplementedError: method `respond_to?' called on terminated object (0x401a84cc)
/home/akr/ruby/head-ruby/lib/ruby/1.9/rss/parser.rb:365:in `start_have_something_element'
/home/akr/ruby/head-ruby/lib/ruby/1.9/rss/parser.rb:282:in `start_else_element'
/home/akr/ruby/head-ruby/lib/ruby/1.9/rss/parser.rb:246:in `tag_start'
/home/akr/ruby/head-ruby/lib/ruby/1.9/rexml/parsers/streamparser.rb:24:in `parse'
/home/akr/ruby/head-ruby/lib/ruby/1.9/rexml/document.rb:171:in `parse_stream'
/home/akr/ruby/head-ruby/lib/ruby/1.9/rss/rexmlparser.rb:21:in `_parse'
/home/akr/ruby/head-ruby/lib/ruby/1.9/rss/parser.rb:113:in `parse'
/home/akr/ruby/head-ruby/lib/ruby/1.9/rss/parser.rb:69:in `parse'
./test/rss/test_dublincore.rb:64:in `test_parser'
./test/rss/test_dublincore.rb:63:in `assert_too_much_tag'
/home/akr/ruby/head-ruby/ruby/test/rss/rss-assertions.rb:51:in `_wrap_assertion'
/home/akr/ruby/head-ruby/ruby/test/rss/rss-assertions.rb:51:in `assert_too_much_tag'
./test/rss/test_dublincore.rb:63:in `test_parser'
./test/rss/test_dublincore.rb:62:in `each'
./test/rss/test_dublincore.rb:62:in `test_parser'
104 tests, 1300 assertions, 0 failures, 1 errors
この場合は core は吐いてませんが、called on terminated object ですから
変に GC されちゃってることがわかります。(ちなみに test-all すると core
を吐きました。)
なにをやっているかというと、setjmp する前に ESI を別の用途に使っている
わけです。NetBSD 上の gcc 3.3.3 ではもともとそうなっていたのですが、
GNU/Linux 上の gcc 3.3.4 で無理矢理そうさせるために asm を使っています。
それによって、呼び出し元での ESI が jmp_buf に入らなくなり、また、スタッ
クに保存された場所は [ruby-dev:25158] で述べたように GC でスキャンする
範囲外になっているので、GC されちゃうことになります。
過去には [ruby-dev:7757] で同じ問題が報告されているようです。そのとき
は alloca(1) の結果を stack_end とすることによって解決されたようです。
[ruby-dev:25158] での && 0 の追加も alloca(1) を使うようにするわけなの
で同じ解決法であったといえます。
なぜ __builtin_frame_address を使うようになったのかがわからないので、
どう解決するのが適切なのかはいまひとつ判断がつきませんが、
__builtin_frame_address をつかったまま問題を解決するなら、次の変更が考
えられます。
Index: gc.c
===================================================================
RCS file: /src/ruby/gc.c,v
retrieving revision 1.192
diff -u -p -r1.192 gc.c
--- gc.c 10 Nov 2004 07:16:24 -0000 1.192
+++ gc.c 12 Dec 2004 17:50:34 -0000
@@ -435,7 +435,12 @@ static unsigned int STACK_LEVEL_MAX = 65
# define STACK_END (&stack_end)
#else
# if defined(__GNUC__) && defined(USE_BUILTIN_FRAME_ADDRESS) && !defined(__ia64__)
-# define SET_STACK_END VALUE *stack_end = __builtin_frame_address(0)
+__attribute__ ((noinline)) static VALUE *
+stack_end_address(void)
+{
+ return (VALUE *)__builtin_frame_address(0);
+}
+# define SET_STACK_END VALUE *stack_end = stack_end_address()
# else
# define SET_STACK_END VALUE *stack_end = alloca(1)
# endif
よーするに、garbage_collect 関数自身のスタックフレームがスキャン対象に
なってないのが問題なわけです。なので、フレームポインタじゃなくてスタッ
クポインタを使えばいいわけで、garbage_collect 関数でのスタックポインタ
はgarbage_collect 関数の中から呼んだ関数のフレームポインタなことを利用
してスタックポインタを得ています。
--
[田中 哲][たなか あきら][Tanaka Akira]