Ruby 1.8 も定期的に build するようにしてみる。
「複数あり得るものをひとつしかないと仮定して設計していた」ため、 URL の変更が起きてしまった。
新しい URL と古い URL に重なりがなく、 古い URL でも提供を続けられるのがせめてもの幸いか。
ここ 2ヶ月ほどで、五月雨は 7回 core を吐いた。
==> log/10-13-21:00-bt-20041014-063610 <== Using host libthread_db library "/lib/libthread_db.so.1". Core was generated by `/home/akr/ruby/ruby/ruby -v ./main.rb -v'. Program terminated with signal 11, Segmentation fault. #0 0x08098b8c in local_tbl_gen (parser=0xc0) at parse.y:7601 7601 lvtbl->nofree = 1; #0 0x08098b8c in local_tbl_gen (parser=0xc0) at parse.y:7601 #1 0x08098ee8 in top_local_setup_gen (parser=0x9311b10) at parse.y:7710 #2 0x080998a5 in special_local_set (c=1 '\001', val=192) at parse.y:8076 #3 0x08099925 in rb_backref_set (val=1086157608) at parse.y:8099 #4 0x080a012a in rb_reg_search (re=1076567600, str=1086157628, pos=1086157608, reverse=0) at re.c:948 #5 0x080a0f35 in rb_reg_eqq (re=192, str=1086157628) at re.c:1572 #6 0x08069f12 in call_cfunc (func=0x80a0ed0 <rb_reg_eqq>, recv=1076567600, len=0, argc=146466652, argv=0xbfff04fc) at eval.c:5364 #7 0x0805e147 in rb_call0 (klass=1075640236, recv=1076567600, id=323, oid=192, argc=1, argv=0xbfff04fc, body=0x401cf5a4, nosuper=0) at eval.c:5508 #8 0x0805e3f8 in rb_call (klass=1075640236, recv=1076567600, mid=323, argc=1, argv=0xbfff04fc, scope=1) at eval.c:5729 #9 0x0805e81a in rb_funcall2 (recv=0, mid=192, argc=192, argv=0xc0) ==> log/11-10-20:40-bt-20041111-061912 <== Using host libthread_db library "/lib/libthread_db.so.1". Core was generated by `/home/akr/ruby/ruby/ruby -v ./main.rb -v'. Program terminated with signal 11, Segmentation fault. #0 0x08099ce5 in local_append_gen (parser=0x8a8f4e0, id=95) at parse.y:7632 7632 lvtbl->tbl[0] = 0; #0 0x08099ce5 in local_append_gen (parser=0x8a8f4e0, id=95) at parse.y:7632 #1 0x0809a99b in special_local_set (c=95 '_', val=138855680) at parse.y:8097 #2 0x0809aa95 in rb_lastline_set (val=0) at parse.y:8144 #3 0x0806648e in rb_thread_save_context (th=0x892dda0) at eval.c:9875 #4 0x08066f01 in rb_thread_schedule () at eval.c:10407 #5 0x08078b3c in rb_io_sysread (argc=138855680, argv=0x846c500, io=138855680) at io.c:2261 #6 0x0806a81a in call_cfunc (func=0x8078a70 <rb_io_sysread>, recv=1078326692, len=1075466412, argc=136, argv=0xbffd84f8) at eval.c:5365 #7 0x0805e767 in rb_call0 (klass=1075636716, recv=1078326692, id=7545, oid=138855680, argc=1, argv=0xbffd84f8, body=0x401ce62c, nosuper=0) at eval.c:5506 #8 0x0805ea18 in rb_call (klass=1075636716, recv=1078326692, mid=7545, argc=1, argv=0xbffd84f8, scope=0) at eval.c:5727 #9 0x08059888 in rb_eval (self=1078564432, n=0x846c500) at ruby.h:633 ==> log/11-10-20:40-bt-20041111-102427 <== Using host libthread_db library "/lib/libthread_db.so.1". Core was generated by `/home/akr/ruby/ruby/ruby -v ./main.rb -v'. Program terminated with signal 6, Aborted. #0 0x4009e6b1 in kill () from /lib/libc.so.6 #0 0x4009e6b1 in kill () from /lib/libc.so.6 #1 0x4009e435 in raise () from /lib/libc.so.6 #2 0x4009f978 in abort () from /lib/libc.so.6 #3 0x080d4e66 in rb_bug (fmt=0x0) at error.c:214 #4 0x0805b45b in rb_eval (self=1075941260, n=0x0) at eval.c:3858 #5 0x0805ada9 in rb_eval (self=1075941260, n=0x0) at eval.c:3089 #6 0x0805995f in rb_eval (self=1075941260, n=0x0) at ruby.h:662 #7 0x0805a3f0 in rb_eval (self=1075941260, n=0x0) at eval.c:2979 #8 0x080590d9 in rb_eval (self=1075941260, n=0x0) at eval.c:3364 #9 0x0805800b in rb_eval (self=1075941260, n=0x0) at eval.c:2653 #10 0x0805e279 in rb_call0 (klass=1075891400, recv=1075941260, id=4481, oid=0, argc=0, argv=0xbffec66c, body=0x4020f7ac, nosuper=0) at eval.c:5634 #11 0x0805ea18 in rb_call (klass=1075891400, recv=1075941260, mid=4481, argc=1, argv=0xbffec668, scope=0) at eval.c:5727 #12 0x08059888 in rb_eval (self=1075941260, n=0x0) at ruby.h:633 #13 0x0805a3f0 in rb_eval (self=1075941260, n=0x0) at eval.c:2979 ==> log/11-12-22:33-bt-20041113-143039 <== Using host libthread_db library "/lib/libthread_db.so.1". Core was generated by `/home/akr/ruby/ruby/ruby -v ./main.rb -v'. Program terminated with signal 6, Aborted. #0 0x4009e6b1 in kill () from /lib/libc.so.6 #0 0x4009e6b1 in kill () from /lib/libc.so.6 #1 0x4009e435 in raise () from /lib/libc.so.6 #2 0x4009f978 in abort () from /lib/libc.so.6 #3 0x080d4e66 in rb_bug (fmt=0x0) at error.c:214 #4 0x0805b45b in rb_eval (self=1075941260, n=0x0) at eval.c:3858 #5 0x0805ada9 in rb_eval (self=1075941260, n=0x0) at eval.c:3089 #6 0x0805995f in rb_eval (self=1075941260, n=0x0) at ruby.h:662 #7 0x0805a3f0 in rb_eval (self=1075941260, n=0x0) at eval.c:2979 #8 0x080590d9 in rb_eval (self=1075941260, n=0x0) at eval.c:3364 #9 0x0805800b in rb_eval (self=1075941260, n=0x0) at eval.c:2653 #10 0x0805e279 in rb_call0 (klass=1075891400, recv=1075941260, id=4481, oid=0, argc=0, argv=0xbffec66c, body=0x4020f7ac, nosuper=0) at eval.c:5634 #11 0x0805ea18 in rb_call (klass=1075891400, recv=1075941260, mid=4481, argc=1, argv=0xbffec668, scope=0) at eval.c:5727 #12 0x08059888 in rb_eval (self=1075941260, n=0x0) at ruby.h:633 #13 0x0805a3f0 in rb_eval (self=1075941260, n=0x0) at eval.c:2979 ==> log/11-18-21:36-bt-20041119-055501 <== Using host libthread_db library "/lib/libthread_db.so.1". Core was generated by `/home/akr/ruby/ruby/ruby -v ./main.rb -v'. Program terminated with signal 11, Segmentation fault. #0 0x08099c9c in local_tbl_gen (parser=0x88) at parse.y:7621 7621 lvtbl->nofree = 1; #0 0x08099c9c in local_tbl_gen (parser=0x88) at parse.y:7621 #1 0x08099ff8 in top_local_setup_gen (parser=0x8942380) at parse.y:7730 #2 0x0809a9a5 in special_local_set (c=0 '\0', val=136) at parse.y:8098 #3 0x0809aa95 in rb_lastline_set (val=0) at parse.y:8144 #4 0x0806648e in rb_thread_save_context (th=0x897a698) at eval.c:9875 #5 0x08066f01 in rb_thread_schedule () at eval.c:10407 #6 0x08078b3c in rb_io_sysread (argc=136, argv=0x88, io=136) at io.c:2261 #7 0x0806a81a in call_cfunc (func=0x8078a70 <rb_io_sysread>, recv=1078622992, len=0, argc=138744676, argv=0xbffd9388) at eval.c:5365 #8 0x0805e767 in rb_call0 (klass=1075636716, recv=1078622992, id=7545, oid=136, argc=1, argv=0xbffd9388, body=0x401ce62c, nosuper=0) at eval.c:5506 #9 0x0805ea18 in rb_call (klass=1075636716, recv=1078622992, mid=7545, argc=1, argv=0xbffd9388, scope=0) at eval.c:5727 #10 0x08059888 in rb_eval (self=1079722972, n=0x88) at ruby.h:633 ==> log/11-24-bt-20041124-232157 <== Using host libthread_db library "/lib/libthread_db.so.1". Core was generated by `/home/akr/ruby/ruby/ruby -v ./main.rb -v'. Program terminated with signal 11, Segmentation fault. #0 0x08099fdc in local_tbl_gen (parser=0x88) at parse.y:7623 7623 lvtbl->nofree = 1; #0 0x08099fdc in local_tbl_gen (parser=0x88) at parse.y:7623 #1 0x0809a338 in top_local_setup_gen (parser=0x8a3bcb0) at parse.y:7732 #2 0x0809ace5 in special_local_set (c=0 '\0', val=136) at parse.y:8100 #3 0x0809add5 in rb_lastline_set (val=0) at parse.y:8146 #4 0x0806659e in rb_thread_save_context (th=0x8a48a38) at eval.c:9898 #5 0x08067011 in rb_thread_schedule () at eval.c:10430 #6 0x08078e5c in rb_io_sysread (argc=136, argv=0x88, io=136) at io.c:2273 #7 0x0806a92a in call_cfunc (func=0x8078d90 <rb_io_sysread>, recv=1079967012, len=0, argc=145255052, argv=0xbffd84f8) at eval.c:5386 #8 0x0805e872 in rb_call0 (klass=1075636716, recv=1079967012, id=7545, oid=136, argc=1, argv=0xbffd84f8, body=0x401ce62c, nosuper=0) at eval.c:5527 #9 0x0805eb28 in rb_call (klass=1075636716, recv=1079967012, mid=7545, argc=1, argv=0xbffd84f8, scope=0) at eval.c:5748 #10 0x080598ea in rb_eval (self=1079366052, n=0x88) at ruby.h:635 ==> log/11-30-bt-20041130-121131 <== Using host libthread_db library "/lib/libthread_db.so.1". Core was generated by `/home/akr/ruby/ruby/ruby -v ./main.rb -v'. Program terminated with signal 6, Aborted. #0 0x4009e6b1 in kill () from /lib/libc.so.6 #0 0x4009e6b1 in kill () from /lib/libc.so.6 #1 0x4009e435 in raise () from /lib/libc.so.6 #2 0x4009f978 in abort () from /lib/libc.so.6 #3 0x080d57a6 in rb_bug (fmt=0x0) at error.c:214 #4 0x0805b4fd in rb_eval (self=1075941040, n=0x0) at eval.c:3868 #5 0x0805ae39 in rb_eval (self=1075941040, n=0x0) at eval.c:3099 #6 0x080599f1 in rb_eval (self=1075941040, n=0x0) at ruby.h:664 #7 0x0805a480 in rb_eval (self=1075941040, n=0x0) at eval.c:2989 #8 0x08059169 in rb_eval (self=1075941040, n=0x0) at eval.c:3374 #9 0x08058095 in rb_eval (self=1075941040, n=0x0) at eval.c:2663 #10 0x0805e3a0 in rb_call0 (klass=1075891180, recv=1075941040, id=4481, oid=0, argc=0, argv=0xbffec66c, body=0x4020f6d0, nosuper=0) at eval.c:5655 #11 0x0805eb58 in rb_call (klass=1075891180, recv=1075941040, mid=4481, argc=1, argv=0xbffec668, scope=0) at eval.c:5748 #12 0x0805991a in rb_eval (self=1075941040, n=0x0) at ruby.h:635 #13 0x0805a480 in rb_eval (self=1075941040, n=0x0) at eval.c:2989
local_tbl_gen で何回か落ちている。
Ruby 1.8 を定期的に build するようにしたとたん、 1.8 が core を吐く。
うぅむ。
Ruby hotlinks 五月雨版に core を吐いた 1.8 がいつ出るのか調べてみる。
まず、アンテナに出ている更新時刻は 2004-12-02 21:36 であり、 また、キャッシュがひとつしかないことからその一回ぶんしかデータがないことがわかる。 また、このエントリを監視している他のアンテナは存在しないようなので、他のアンテナから更新を通知されることもない。
次に、アクセスログを調べる。
61.120.18.100 - - [02/Dec/2004:23:42:32 +0900] "GET /~akr/autobuild/ruby-1.8/latest.html HTTP/1.1" 200 31170 "-" "samidare" 61.120.18.100 - - [03/Dec/2004:01:50:23 +0900] "GET /~akr/autobuild/ruby-1.8/latest.html HTTP/1.1" 304 - "-" "samidare" 61.120.18.100 - - [03/Dec/2004:06:50:26 +0900] "GET /~akr/autobuild/ruby-1.8/latest.html HTTP/1.1" 304 - "-" "samidare" 61.120.18.100 - - [03/Dec/2004:16:50:22 +0900] "GET /~akr/autobuild/ruby-1.8/latest.html HTTP/1.1" 304 - "-" "samidare"
つまり、2004-12-02 21:36 に更新されたのを 2004-12-02 23:42:32 にアクセスして発見している。 そして、2004-12-03 16:50:22 にはまだ更新されていないことを確認している。
ここで、五月雨は exponential backoff ということで、 更新されなかったことが確認された時間と同じだけの時間は検出しなくてもいいだろうと判断する。
だから、最初は、
% ruby -rtime -e 't1 = Time.parse("2004-12-02 21:36"); t2 = Time.parse("2004-12-02 23:42:32"); p t2+(t2-t1)' Fri Dec 03 01:49:04 JST 2004
という計算で、2004-12-03 01:49:04 まではアクセスしない。 で、このアンテナは毎時 50分に起動するから、その後に起動する 2004-12-03 01:50 頃にアクセスしている。
その次は、
% ruby -rtime -e 't1 = Time.parse("2004-12-02 21:36"); t2 = Time.parse("2004-12-03 01:50:23"); p t2+(t2-t1)' Fri Dec 03 06:04:46 JST 2004
なので 06:50 頃にアクセスするという感じで、現時点では
% ruby -rtime -e 't1 = Time.parse("2004-12-02 21:36"); t2 = Time.parse("2004-12-03 16:50:22"); p t2+(t2-t1)' Sat Dec 04 12:04:44 JST 2004
というわけで、次にアクセスするのは明日の 12:05 以降の 12:50 頃となる、はずである。 (最長検出間隔の設定もあるが、最終検出時刻からの時間が最長検出間隔(24時間)を越えてはいないので、今回は関係ない)
ちなみに、このエントリは頼んで Periodical: true と設定してもらったので、 五月雨は一定間隔に更新されると予想する。 しかし、今回は一回しかデータがなく、間隔は予想できない。 そのため最終更新時間を起点にして倍々に延ばしているが、 通常は予想した更新時刻を起点に最短検出間隔の 5分から始めて倍々に延ばしていく。
そーいや、nonblock にしなくても、signal を受ければ block が終るので、 インターバルタイマをセットしておけばいいのではないかと思いつく。
でも、Ruby はスレッドでインターバルタイマを使っているのだから問題ないのではないだろうかと思いきや、 ITIMER_VIRTUAL なので、I/O 待ちのときにはタイマが進まないのであった。
というわけで、ITIMER_REAL を使ってみる。 ついでに dl に初挑戦。
% ruby -rdl/import -rdl/struct -e ' module LIBC extend DL::Importable dlload "libc.so.6" Itimerval = struct [ "long interval_sec", "long interval_usec", "long value_sec", "long value_usec" ] extern "int setitimer(int, struct itimerval *, struct itimerval *)" end itimer = LIBC::Itimerval.malloc itimer.interval_sec = 0 itimer.interval_usec = 10000 itimer.value_sec = 0 itimer.value_usec = 10000 trap("ALRM") {} LIBC.setitimer(0, itimer, DL::PtrData.new(0)) r1 = r2 = nil t1 = Thread.new { r1, w = IO.pipe w.write "a" * 10000 w.close } t2 = Thread.new { r2, w = IO.pipe w.write "b" * 10000 w.close } while v = r1.read(900) p v.length end while v = r2.read(900) p v.length end ' 900 900 900 900 900 900 900 900 900 900 900 100 900 900 900 900 900 900 900 900 900 900 900 100
Ruby 1.9 で、IO のバッファリングを stdio 抜きで実装した。 この影響はいろいろとあるのだが、 予想していなかった影響として、 変なタイミングで close しても落ちなくなったということがある。
まぁ、考えてみれば、変なタイミングで close すると FILE 構造体が解放された後に その中身をアクセスするはめになるのが落ちる原因だったので、 FILE 構造体をアクセスしなくなってしまった以上、落ちなくなるのは納得できる。
落ちなくなったかわりになにが起きるかというと、 close した後は file descriptor が -1 になっているので、 それを system call にわたして EBADF になるというのが典型的で、 期待される「落ちない」という仕様を十分に満たしている。
Perl, Python, Ruby は基本的なデータ構造として、array と hash を持っている。 (hash という名前は、dictionary とか associative array とかと呼ぶべきかも知れないがここでは気にしないことにする)
でも、言語にとっての基本データ構造の選択肢はそれだけというわけではない。
たとえば、 array は整数からオブジェクトへの写像であり、 hash はオブジェクトからオブジェクトへの写像であるため、 array は hash の一種であると考えることもできる。 したがって、array をなくして hash だけで済ますという選択肢もあって、 awk, lua, JavaScript などはそうなっている。
また、hash は使わず array の長さも 2 に固定するという選択肢もあって、 それは cons cell と呼ばれている。
さて、最近感じている疑問は、 RDB のテーブルを基本的なデータ構造として採用している言語はあるか、 というものである。
もちろん SQL という言語はあるのだが、そうではなく、 汎用のプログラミング言語で SQL を使わず直接 あのテーブルを気楽に扱えるもの、という意味である。
RDB を使ってみると、データ構造の抽象化として、 あのテーブルはさまざまなケースで便利なことに気がつく。
たとえば、hash で値からキーを求めたい、ということがあると、 もうひとつ逆方向の hash をつくってメンテナンスしないと効率的には行えないが、 RDB であればインデックスをひとつ作ると宣言するだけで済む。 もちろん、中身では同様の処理が行われているはずなわけであるが、 その処理は新しく記述しなくても良いためバグの導入を心配する必要がなく、 また、要素の追加だけじゃなくて、削除とかの処理も問題なく動作するというのが楽なのである。
そういう、データ構造の抽象化はかなり嬉しい。 しかし、それにアクセスするための SQL には問題がある。 やりたいことをダイレクトに記述できないのである。 たとえば、インデックスを作っても本当にそれが使われているのかどうか良くわからない。
というわけで、SQL を使わずに RDB のテーブルを気楽に扱える言語があると面白いと思うのだが...
Python における stdio の状況を調べてみる。
まず、現在最新の Python 2.4 は stdio を使っているようだ。 Python 2.4 Library Reference 2.3.9 File Objects
作者の発言を探してみる。
1995年の発言では捨てる気はなかった模様。
1999年の発言では Python 2.0 では捨てるかもしれないと述べている。
Perl における stdio の状況を調べてみる。 たしか、PerlIO というのが導入されたはずだが...
PerlIO は Perl 5.8.0 (2002年) でデフォルトになったらしい。 perl58delta : PerlIO is Now The Default
perlio あたりで探すとリファレンスなどのドキュメントがあまりに多く見つかって、 導入される前の経緯が見つからない。
http://www.perl.com/ の検索で探すと、This Week on p5p に載ったものがいくつか見つかったが、 「なぜ」PerlIO に踏み切ったのか、というあたりの事情はよくわからない。 sfio を試していたような記述はある。
The self-pipe trick を読む。
... なんか signal と I/O の扱いかたに関する DJB の方針がわかった気がする。
signal handler で実際の処理をするのは危険すぎるので、後に遅らせる。 でも、signal handler から出てすぐに system call でブロックしてしまうと遅れすぎるのでそれは避けたい。
その要求を満たすために、 read や write は nonblock で動かして、ブロックするのは select だけに限定する。 その select は self-pipe で signal handler が終ったら select も終らせる。 (または、select が起動する前に signal を受け取った場合は select がブロックしないようにする)
たしかにそういう方針であればだいたいうまくいきそうである。
で、うまくいかないのが nonblocking read/write のところで、 O_NONBLOCK を使うと他のプロセスと干渉して邪魔されたり邪魔したりする可能性があるし、 timer を使うと delay が入ってしまう、と。 なるほど nonblock_read, nonblock_write が欲しくなるのもよくわかる。
Gacuche も独自バッファリングだそうで、すばらしいことです。
Ruby での詳しい経緯は [ruby-dev:25101] に書きました。 (実際にはこの時点からもう少し進んで、Solaris での 256個制限が緩和されています。)
終了時の flush ですが、 幸いにして Ruby には finalizer があってもともとそこで fclose していました。 そして、finalizer は終了時にも動作するので、そこを書き換えるだけで済みました。
ただ、finalizer 関係ではひとつ問題があって、 じつは最初あまり考えずにバッファを String object として実装していたのですが、 そうすると GC が IO object よりも先にバッファを削除してしまうことがあるようでした。 まぁ、GC がオブジェクトを削除する順番は不定なので、 それはしょうがないかということで、バッファは Ruby の object ではなく GC に管理されない形で実装し直しました。 (Ruby の GC は Ruby object しか管理せず、直接 malloc したものは GC の管理下には置かれないためそういうことが可能です。 まぁ、これは厄介な問題を引き起こすこともあるのですが。)
バッファリングモードは、出力側は stdio と同様に 「出来る限りバッファ」「ラインバッファ」「バッファ無し」があります。 正確には、「バッファ無し」の場合でもバッファを確保してしまいますが。 「毎回 flush」というほうが正確ですかね。
ただ、Ruby では pipe や socket を作ったとき自動的に「バッファ無し」になり、 また「ラインバッファ」が使われるのは端末だけです。 Ruby レベルでバッファリングモードを制御するメソッドは io.sync = bool というものしかないため、 毎回 flush するかどうかしか選べません。 毎回 flush しないときに残りのどちらのモードになるかは、 対象が端末かどうかで決まります。
入力側は常に「出来る限りバッファ」です。 つまり、read の引数には基本的にバッファの大きさ (8KByte) が渡されます。 また、read を呼ぶ直前には select で入力を調べ、 スレッドのコンテキストスイッチが起こる可能性があります。
stdio の入力側の「バッファ無し」はバッファにデータを貯めないために read でデータを読みすぎないようにするものですが、 これに相当する機能はありません。 だいたい、この条件を満たして行を読み込むには、 1byte 毎に read を呼び出さないといけなくて、効率が悪すぎます。 (socket なら MSG_PEEK という手はある?) また、Ruby レベルではもともとこのモードを指定する方法はないので、 実装することは全く考えませんでした。
ただ、Gauche の入力側の「バッファリングなし」のような、 バッファの大きさを越えるかもしれない引数で高々一回 read を呼ぶ機能はあります。 これはモードではなくメソッドで、readpartial というものです。 これは、長さがわからないんだけど、到着しているぶんは読みたい、 という要求に対応するためのものです。 [ruby-dev:22945]
例外コンディションはまったく管理しません。 これは意図的で、とくに feof については、以前 [ruby-dev:22334] で有害であることを主張したのが受け入れられていて、 Ruby では EOF flag に依存する挙動はほとんどありませんでした。 そのため、今回は実装しなかったわけですが、挙動はほとんど変化していません。 まぁ、端末に対する eof? とか、影響がまったくないわけじゃないんですが。
あと、Ruby でも文字列の中身は copy-on-write です。 ただ、現時点では書き込むデータを表現する文字列は複製してなくて、 他のスレッドがその文字列を書き換えたときには、 書き込みはじめた時点でのデータが書き込まれることは保証されません。 (以前は落ちることもあったのですが、いまは落ちることはなくなったはずです。 [ruby-dev:24649])
文字列とバッファ間のコピーを避けるには、writev, readv が使えるように思います。 書き込み側だと、バッファに溜ってるデータと新しく来たデータを writev で一度に書き込めるように思います。 読み込み側だと、固定長の読み込みに限っては、 readv を使って、読み込み先の文字列とバッファに一度に読み込むというのが可能かも知れません。 行単位の読み込みでは長さがわからないからコピーを避けるのは無理な感じですが。
sigsafe library for safe signal handling.
うぅむ。やっぱアセンブラで書けばどうにかできるわけか...
gcc に guess-branch-probability という機能があることを知る。
生成コードをランダムに変えるのか...
将来、落ちる直前の GC での stacktrace が見たい、 という気分になることがあるのではないかという疑いを持ち、 次のようなコードを追加してみる。
Index: gc.c =================================================================== RCS file: /src/ruby/gc.c,v retrieving revision 1.193 diff -u -p -r1.193 gc.c --- gc.c 13 Dec 2004 09:57:41 -0000 1.193 +++ gc.c 14 Dec 2004 05:58:25 -0000 @ -1286,6 +1286,10 @@ int rb_setjmp (rb_jmp_buf); #endif /* __human68k__ or DJGPP */ #endif /* __GNUC__ */ +#ifdef __GNUC__ +static void *last_gc_stacktrace[10]; +#endif + static void garbage_collect() { @ -1307,6 +1311,19 @@ garbage_collect() } if (during_gc) return; during_gc++; + +#ifdef __GNUC__ + last_gc_stacktrace[0] = __builtin_return_address(0); + last_gc_stacktrace[1] = __builtin_return_address(1); + last_gc_stacktrace[2] = __builtin_return_address(2); + last_gc_stacktrace[3] = __builtin_return_address(3); + last_gc_stacktrace[4] = __builtin_return_address(4); + last_gc_stacktrace[5] = __builtin_return_address(5); + last_gc_stacktrace[6] = __builtin_return_address(6); + last_gc_stacktrace[7] = __builtin_return_address(7); + last_gc_stacktrace[8] = __builtin_return_address(8); + last_gc_stacktrace[9] = __builtin_return_address(9); +#endif init_mark_stack();
アドレスからソースにたどり着くには、gdb で list *address とする。
1.9 の build が落ちていたのでちょっと中身を覗いてみる。
Z:akr@boron% find . -name core -print ./share/ri/1.9/system/core Z:akr@boron% file ./share/ri/1.9/system/core ./share/ri/1.9/system/core: ELF 32-bit LSB core file Intel 80386, version 1 (SYSV), SVR4-style, SVR4-style, from 'ruby' Z:akr@boron% gdb ruby/ruby ./share/ri/1.9/system/core GNU gdb 6.1-debian Copyright 2004 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "i386-linux"...Using host libthread_db library "/lib/tls/libthread_db.so.1". Core was generated by `./ruby ./bin/rdoc --all --ri --op /home/akr/tmp/autobuild/ruby-trunk/20041216-0'. Program terminated with signal 6, Aborted. warning: current_sos: Can't read pathname for load map: Input/output error Reading symbols from /lib/tls/libdl.so.2...Reading symbols from /usr/lib/debug//lib/tls/libdl-2.3.2.so...done. done. Loaded symbols for /lib/tls/libdl.so.2 Reading symbols from /lib/tls/libcrypt.so.1...Reading symbols from /usr/lib/debug//lib/tls/libcrypt-2.3.2.so...done. done. Loaded symbols for /lib/tls/libcrypt.so.1 Reading symbols from /lib/tls/libm.so.6...Reading symbols from /usr/lib/debug//lib/tls/libm-2.3.2.so...done. done. Loaded symbols for /lib/tls/libm.so.6 Reading symbols from /lib/tls/libc.so.6...Reading symbols from /usr/lib/debug//lib/tls/libc-2.3.2.so...done. done. Loaded symbols for /lib/tls/libc.so.6 Reading symbols from /lib/ld-linux.so.2...Reading symbols from /usr/lib/debug//lib/ld-2.3.2.so...done. done. Loaded symbols for /lib/ld-linux.so.2 Reading symbols from /home/akr/tmp/autobuild/ruby-trunk/20041216-015434/ruby/.ext/i686-linux/syck.so...done. Loaded symbols for /home/akr/tmp/autobuild/ruby-trunk/20041216-015434/ruby/.ext/i686-linux/syck.so Reading symbols from /home/akr/tmp/autobuild/ruby-trunk/20041216-015434/ruby/.ext/i686-linux/etc.so...done. Loaded symbols for /home/akr/tmp/autobuild/ruby-trunk/20041216-015434/ruby/.ext/i686-linux/etc.so #0 0x40099ed9 in raise () from /lib/tls/libc.so.6 (gdb) bt #0 0x40099ed9 in raise () from /lib/tls/libc.so.6 #1 0x4009b771 in abort () from /lib/tls/libc.so.6 #2 0x080d5756 in rb_bug (fmt=0x0) at error.c:214 #3 0x080b2712 in sigsegv (sig=11) at signal.c:446 #4 <signal handler called> #5 0x0809a08c in local_tbl_gen (parser=0x88) at parse.y:7627 #6 0x0809a3e8 in top_local_setup_gen (parser=0x9a1af50) at parse.y:7736 #7 0x0809ad95 in special_local_set (c=1 '\001', val=136) at parse.y:8104 #8 0x0809ae15 in rb_backref_set (val=4) at parse.y:8127 #9 0x080a1b9c in rb_reg_search (re=1082853732, str=1082854732, pos=0, reverse=0) at re.c:926 #10 0x080b8d11 in str_gsub (argc=0, argv=0xbfff3598, str=1082854732, bang=1) at string.c:2073 #11 0x080b9298 in rb_str_gsub_bang (argc=136, argv=0x88, str=136) at string.c:2186 #12 0x0806ac5a in call_cfunc (func=0x80b9270 <rb_str_gsub_bang>, recv=1082854732, len=0, argc=163175100, argv=0xbfff3598) at eval.c:5418 #13 0x0805ea12 in rb_call0 (klass=1075685300, recv=1082854732, id=4631, oid=136, argc=2, argv=0xbfff3598, body=0x401d9d3c, nosuper=0) at eval.c:5559 #14 0x0805ecd8 in rb_call (klass=1075685300, recv=1082854732, mid=4631, argc=2, argv=0xbfff3598, scope=0) at eval.c:5781 #15 0x080597fa in rb_eval (self=1083829132, n=0x88) at ruby.h:635 #16 0x0805e517 in rb_call0 (klass=1079384672, recv=1083829132, id=20057, oid=136, argc=0, argv=0x0, body=0x4056cd20, nosuper=0) at eval.c:5688 #17 0x0805ecd8 in rb_call (klass=1079384672, recv=1083829132, mid=20057, argc=0, argv=0x0, scope=2) at eval.c:5781 #18 0x080597fa in rb_eval (self=1083829132, n=0x88) at ruby.h:635 #19 0x0805e517 in rb_call0 (klass=1079384672, recv=1083829132, id=19633, oid=136, argc=0, argv=0xbfff460c, body=0x40568fb8, nosuper=0) at eval.c:5688 #20 0x0805ecd8 in rb_call (klass=1079384672, recv=1083829132, mid=19633, argc=1, argv=0xbfff4608, scope=0) at eval.c:5781 #21 0x080597fa in rb_eval (self=1083829152, n=0x88) at ruby.h:635 #22 0x08059b2b in rb_eval (self=1083829152, n=0x88) at ruby.h:664 #23 0x080598d1 in rb_eval (self=1083829152, n=0x88) at ruby.h:664 #24 0x080598d1 in rb_eval (self=1083829152, n=0x88) at ruby.h:664 #25 0x0805e517 in rb_call0 (klass=1078566372, recv=1083829152, id=19329, oid=136, argc=0, argv=0xbfff6170, body=0x40582c9c, nosuper=0) at eval.c:5688 #26 0x0805ecd8 in rb_call (klass=1078566372, recv=1083829152, mid=19329, argc=2, argv=0xbfff6168, scope=0) at eval.c:5781 #27 0x080597fa in rb_eval (self=1082855172, n=0x88) at ruby.h:635 #28 0x0805c8d7 in rb_yield_0 (val=1082854772, self=1082855172, klass=4, flags=0, avalue=0) at eval.c:4755 #29 0x0805cf19 in rb_yield (val=136) at eval.c:4837 #30 0x080c824f in rb_ary_each (ary=1082854272) at array.c:1255 #31 0x0806ac61 in call_cfunc (func=0x80c8220 <rb_ary_each>, recv=1082854272, len=0, argc=163175100, argv=0x0) at eval.c:5421 #32 0x0805ea12 in rb_call0 (klass=1075664040, recv=1082854272, id=3865, oid=136, argc=0, argv=0x0, body=0x401d5084, ---Type <return> to continue, or q <return> to quit--- nosuper=0) at eval.c:5559 #33 0x0805ecd8 in rb_call (klass=1075664040, recv=1082854272, mid=3865, argc=0, argv=0x0, scope=0) at eval.c:5781 #34 0x080597fa in rb_eval (self=1082855172, n=0x88) at ruby.h:635 #35 0x08058ba9 in rb_eval (self=1082855172, n=0x88) at eval.c:2919 #36 0x0805e517 in rb_call0 (klass=1079555912, recv=1082855172, id=18801, oid=136, argc=0, argv=0xbfff7aa0, body=0x405a03dc, nosuper=0) at eval.c:5688 #37 0x0805ecd8 in rb_call (klass=1079555912, recv=1082855172, mid=18801, argc=2, argv=0xbfff7a98, scope=0) at eval.c:5781 #38 0x080597fa in rb_eval (self=1083829172, n=0x88) at ruby.h:635 #39 0x0805e517 in rb_call0 (klass=1079553592, recv=1083829172, id=18433, oid=136, argc=0, argv=0xbfff82e0, body=0x405b81a8, nosuper=0) at eval.c:5688 #40 0x0805ecd8 in rb_call (klass=1079553592, recv=1083829172, mid=18433, argc=2, argv=0xbfff82d8, scope=0) at eval.c:5781 #41 0x080597fa in rb_eval (self=1083829712, n=0x88) at ruby.h:635 #42 0x0805e517 in rb_call0 (klass=1083829772, recv=1083829712, id=18337, oid=136, argc=0, argv=0xbfff8b1c, body=0x405cdfe4, nosuper=0) at eval.c:5688 #43 0x0805ecd8 in rb_call (klass=1083829772, recv=1083829712, mid=18337, argc=1, argv=0xbfff8b18, scope=1) at eval.c:5781 #44 0x080597fa in rb_eval (self=1083829712, n=0x88) at ruby.h:635 #45 0x0805b363 in rb_eval (self=1083829712, n=0x88) at ruby.h:664 #46 0x0805e517 in rb_call0 (klass=1083829772, recv=1083829712, id=18385, oid=136, argc=0, argv=0xbfff99f0, body=0x405d4790, nosuper=0) at eval.c:5688 #47 0x0805ecd8 in rb_call (klass=1083829772, recv=1083829712, mid=18385, argc=2, argv=0xbfff99e8, scope=1) at eval.c:5781 #48 0x080597fa in rb_eval (self=1083829712, n=0x88) at ruby.h:635 #49 0x0805c8d7 in rb_yield_0 (val=1076204352, self=1083829712, klass=4, flags=0, avalue=0) at eval.c:4755 #50 0x0805cf19 in rb_yield (val=136) at eval.c:4837 #51 0x080c824f in rb_ary_each (ary=1083746072) at array.c:1255 #52 0x0806ac61 in call_cfunc (func=0x80c8220 <rb_ary_each>, recv=1083746072, len=0, argc=163175100, argv=0x0) at eval.c:5421 #53 0x0805ea12 in rb_call0 (klass=1075664040, recv=1083746072, id=3865, oid=136, argc=0, argv=0x0, body=0x401d5084, nosuper=0) at eval.c:5559 #54 0x0805ecd8 in rb_call (klass=1075664040, recv=1083746072, mid=3865, argc=0, argv=0x0, scope=0) at eval.c:5781 #55 0x080597fa in rb_eval (self=1083829712, n=0x88) at ruby.h:635 #56 0x08058ba9 in rb_eval (self=1083829712, n=0x88) at eval.c:2919 #57 0x0805e517 in rb_call0 (klass=1083829772, recv=1083829712, id=18305, oid=136, argc=0, argv=0xbfffb3ac, body=0x405d8624, nosuper=0) at eval.c:5688 #58 0x0805ecd8 in rb_call (klass=1083829772, recv=1083829712, mid=18305, argc=1, argv=0xbfffb3a8, scope=1) at eval.c:5781 #59 0x080597fa in rb_eval (self=1083829712, n=0x88) at ruby.h:635 #60 0x0805e517 in rb_call0 (klass=1083829772, recv=1083829712, id=18289, oid=136, argc=0, argv=0xbfffbbdc, body=0x405d93e4, nosuper=0) at eval.c:5688 #61 0x0805ecd8 in rb_call (klass=1083829772, recv=1083829712, mid=18289, argc=1, argv=0xbfffbbd8, scope=1) at eval.c:5781 #62 0x080597fa in rb_eval (self=1083829712, n=0x88) at ruby.h:635 ---Type <return> to continue, or q <return> to quit--- #63 0x0805c8d7 in rb_yield_0 (val=1076306092, self=1083829712, klass=4, flags=0, avalue=0) at eval.c:4755 #64 0x0805cf19 in rb_yield (val=136) at eval.c:4837 #65 0x080c824f in rb_ary_each (ary=1083828172) at array.c:1255 #66 0x0806ac61 in call_cfunc (func=0x80c8220 <rb_ary_each>, recv=1083828172, len=0, argc=163175100, argv=0x0) at eval.c:5421 #67 0x0805ea12 in rb_call0 (klass=1075664040, recv=1083828172, id=3865, oid=136, argc=0, argv=0x0, body=0x401d5084, nosuper=0) at eval.c:5559 #68 0x0805ecd8 in rb_call (klass=1075664040, recv=1083828172, mid=3865, argc=0, argv=0x0, scope=0) at eval.c:5781 #69 0x080597fa in rb_eval (self=1083829712, n=0x88) at ruby.h:635 #70 0x08058ba9 in rb_eval (self=1083829712, n=0x88) at eval.c:2919 #71 0x0805e517 in rb_call0 (klass=1083829772, recv=1083829712, id=11025, oid=136, argc=0, argv=0xbfffd4fc, body=0x405d9b8c, nosuper=0) at eval.c:5688 #72 0x0805ecd8 in rb_call (klass=1083829772, recv=1083829712, mid=11025, argc=1, argv=0xbfffd4f8, scope=0) at eval.c:5781 #73 0x080597fa in rb_eval (self=1076604412, n=0x88) at ruby.h:635 #74 0x08058fd2 in rb_eval (self=1076604412, n=0x88) at eval.c:3055 #75 0x08057f75 in rb_eval (self=1076604412, n=0x88) at eval.c:2652 #76 0x0805e517 in rb_call0 (klass=1076584652, recv=1076604412, id=10465, oid=136, argc=0, argv=0xbfffea3c, body=0x401c6124, nosuper=0) at eval.c:5688 #77 0x0805ecd8 in rb_call (klass=1076584652, recv=1076604412, mid=10465, argc=1, argv=0xbfffea38, scope=0) at eval.c:5781 #78 0x080597fa in rb_eval (self=1075689920, n=0x88) at ruby.h:635 #79 0x08058e8a in rb_eval (self=1075689920, n=0x88) at eval.c:3006 #80 0x08055dcd in ruby_exec_internal () at eval.c:1470 #81 0x08055de6 in ruby_exec () at eval.c:1488 #82 0x08055e30 in ruby_run () at eval.c:1505 #83 0x08053e35 in main (argc=136, argv=0x88, envp=0xbffff8b4) at main.c:38 (gdb) up #1 0x4009b771 in abort () from /lib/tls/libc.so.6 (gdb) #2 0x080d5756 in rb_bug (fmt=0x0) at error.c:214 214 abort(); (gdb) #3 0x080b2712 in sigsegv (sig=11) at signal.c:446 446 rb_bug("Segmentation fault"); (gdb) #4 <signal handler called> (gdb) #5 0x0809a08c in local_tbl_gen (parser=0x88) at parse.y:7627 7627 lvtbl->nofree = 1; (gdb) p lvtbl No symbol "lvtbl" in current context. (gdb) l 7622 7623 static ID* 7624 local_tbl_gen(parser) 7625 struct parser_params *parser; 7626 { 7627 lvtbl->nofree = 1; 7628 return lvtbl->tbl; 7629 } 7630 7631 static int (gdb) p *parser Cannot access memory at address 0x88 (gdb) p parser $1 = (struct parser_params *) 0x88 (gdb) up #6 0x0809a3e8 in top_local_setup_gen (parser=0x9a1af50) at parse.y:7736 7736 ruby_scope->local_tbl = local_tbl(); (gdb) l 7731 } 7732 if (ruby_scope->local_tbl && ruby_scope->local_vars[-1] == 0) { 7733 xfree(ruby_scope->local_tbl); 7734 } 7735 ruby_scope->local_vars[-1] = 0; 7736 ruby_scope->local_tbl = local_tbl(); 7737 } 7738 } 7739 local_pop(); 7740 } (gdb) p parser $2 = (struct parser_params *) 0x9a1af50 (gdb) p *parser $3 = {value = 161591304, result = 161590520, parsing_thread = 4, toplevel_p = 2, parser_yylval = 0x0, eofp = 0, parser_eval_tree_begin = 0x0, parser_eval_tree = 0x0, parser_lex_strterm = 0x0, parser_lex_state = EXPR_BEG, parser_cond_stack = 0, parser_cmdarg_stack = 0, parser_class_nest = 0, parser_in_single = 0, parser_in_def = 0, parser_compile_for_eval = 0, parser_cur_mid = 0, parser_in_defined = 0, parser_tokenbuf = 0x0, parser_tokidx = 0, parser_toksiz = 0, parser_lex_input = 0, parser_lex_lastline = 0, parser_lex_pbeg = 0x0, parser_lex_p = 0x0, parser_lex_pend = 0x0, parser_heredoc_end = 0, parser_command_start = 2, parser_lex_gets_ptr = 0, parser_lex_gets = 0, parser_lvtbl = 0x88} (gdb)
うぅむ。これは五月雨でも似たのがあったな。
% grep -C10 rb_backref_set log/*-bt-* log/10-13-21:00-bt-20041014-063610-Using host libthread_db library "/lib/libthread_db.so.1". log/10-13-21:00-bt-20041014-063610-Core was generated by `/home/akr/ruby/ruby/ruby -v ./main.rb -v'. log/10-13-21:00-bt-20041014-063610-Program terminated with signal 11, Segmentation fault. log/10-13-21:00-bt-20041014-063610-#0 0x08098b8c in local_tbl_gen (parser=0xc0) at parse.y:7601 log/10-13-21:00-bt-20041014-063610-7601 lvtbl->nofree = 1; log/10-13-21:00-bt-20041014-063610-#0 0x08098b8c in local_tbl_gen (parser=0xc0) at parse.y:7601 log/10-13-21:00-bt-20041014-063610-#1 0x08098ee8 in top_local_setup_gen (parser=0x9311b10) at parse.y:7710 log/10-13-21:00-bt-20041014-063610-#2 0x080998a5 in special_local_set (c=1 '\001', val=192) at parse.y:8076 log/10-13-21:00-bt-20041014-063610:#3 0x08099925 in rb_backref_set (val=1086157608) at parse.y:8099 log/10-13-21:00-bt-20041014-063610-#4 0x080a012a in rb_reg_search (re=1076567600, str=1086157628, log/10-13-21:00-bt-20041014-063610- pos=1086157608, reverse=0) at re.c:948 log/10-13-21:00-bt-20041014-063610-#5 0x080a0f35 in rb_reg_eqq (re=192, str=1086157628) at re.c:1572 log/10-13-21:00-bt-20041014-063610-#6 0x08069f12 in call_cfunc (func=0x80a0ed0 <rb_reg_eqq>, recv=1076567600, log/10-13-21:00-bt-20041014-063610- len=0, argc=146466652, argv=0xbfff04fc) at eval.c:5364 log/10-13-21:00-bt-20041014-063610-#7 0x0805e147 in rb_call0 (klass=1075640236, recv=1076567600, id=323, log/10-13-21:00-bt-20041014-063610- oid=192, argc=1, argv=0xbfff04fc, body=0x401cf5a4, nosuper=0) log/10-13-21:00-bt-20041014-063610- at eval.c:5508 log/10-13-21:00-bt-20041014-063610-#8 0x0805e3f8 in rb_call (klass=1075640236, recv=1076567600, mid=323, argc=1, log/10-13-21:00-bt-20041014-063610- argv=0xbfff04fc, scope=1) at eval.c:5729
これは ruby_eval_tree ではなかったか。 とすると、last_gc_stacktrace が役に立つ日も遠くはないのかもしれない。
それはそれとして、core を吐いたときの backtrace の表示は自動化したいところだ。
ふと思ったのだが、典型的な場合に対してライブラリを使いやすくる方法として、 最初に他人からリクエストされた要求に対して使いやすくするという方法があるかもしれない。
なにしろ、典型的な場合は典型的であるがゆえに、最初に他人からリクエストされる可能性が高いのだから。
catchsegv というコマンドを知る。
たまに、今年が平成何年なのか調べなければならないことがある。
最近気がついたのだが、これは定期券を見るとわかる。
ふと思いついて、GC で回収されたオブジェクト(の残骸)に 何回目の GC で回収されたのかを記録してみる。
Index: gc.c =================================================================== RCS file: /src/ruby/gc.c,v retrieving revision 1.193 diff -u -p -r1.193 gc.c --- gc.c 13 Dec 2004 09:57:41 -0000 1.193 +++ gc.c 19 Dec 2004 09:58:18 -0000 @ -284,6 +284,7 @@ typedef struct RVALUE { struct { unsigned long flags; /* always 0 for freed obj */ struct RVALUE *next; + long gc_count; } free; struct RBasic basic; struct RObject object; @ -308,6 +309,7 @@ typedef struct RVALUE { #endif } RVALUE; +static long gc_count = 0; static RVALUE *freelist = 0; static RVALUE *deferred_final_list = 0; @ -370,6 +372,7 @@ add_heap() while (p < pend) { p->as.free.flags = 0; p->as.free.next = freelist; + p->as.free.gc_count = gc_count; freelist = p; p++; } @ -1002,6 +1005,7 @@ finalize_list(p) if (!FL_TEST(p, FL_SINGLETON)) { /* not freeing page */ p->as.free.flags = 0; p->as.free.next = freelist; + p->as.free.gc_count = gc_count; freelist = p; } p = tmp; @ -1036,6 +1040,7 @@ gc_sweep() unsigned long live = 0; mark_source_filename(ruby_sourcefile); + if (source_filenames) st_foreach(source_filenames, sweep_source_filename, 0); freelist = 0; @ -1055,6 +1060,7 @@ gc_sweep() if (need_call_final && FL_TEST(p, FL_FINALIZE)) { p->as.free.flags = FL_MARK; /* remain marked */ p->as.free.next = final_list; + p->as.free.gc_count = gc_count; final_list = p; } else { @ -1111,6 +1117,7 @@ rb_gc_force_recycle(p) { RANY(p)->as.free.flags = 0; RANY(p)->as.free.next = freelist; + RANY(p)->as.free.gc_count = -1; freelist = RANY(p); } @ -1286,6 +1293,11 @@ int rb_setjmp (rb_jmp_buf); #endif /* __human68k__ or DJGPP */ #endif /* __GNUC__ */ +#ifdef __GNUC__ +void *main_frame_address; +static void *last_gc_stacktrace[10]; +#endif + static void garbage_collect() { @ -1308,6 +1320,40 @@ garbage_collect() if (during_gc) return; during_gc++; + gc_count++; + +#ifdef __GNUC__ + memset(last_gc_stacktrace, 0, sizeof(last_gc_stacktrace)); + last_gc_stacktrace[0] = __builtin_return_address(0); + if (__builtin_frame_address(1) != main_frame_address) { + last_gc_stacktrace[1] = __builtin_return_address(1); + if (__builtin_frame_address(2) != main_frame_address) { + last_gc_stacktrace[2] = __builtin_return_address(2); + if (__builtin_frame_address(3) != main_frame_address) { + last_gc_stacktrace[3] = __builtin_return_address(3); + if (__builtin_frame_address(4) != main_frame_address) { + last_gc_stacktrace[4] = __builtin_return_address(4); + if (__builtin_frame_address(5) != main_frame_address) { + last_gc_stacktrace[5] = __builtin_return_address(5); + if (__builtin_frame_address(6) != main_frame_address) { + last_gc_stacktrace[6] = __builtin_return_address(6); + if (__builtin_frame_address(7) != main_frame_address) { + last_gc_stacktrace[7] = __builtin_return_address(7); + if (__builtin_frame_address(8) != main_frame_address) { + last_gc_stacktrace[8] = __builtin_return_address(8); + if (__builtin_frame_address(9) != main_frame_address) { + last_gc_stacktrace[9] = __builtin_return_address(9); + } + } + } + } + } + } + } + } + } +#endif + init_mark_stack(); /* mark frame stack */ Index: main.c =================================================================== RCS file: /src/ruby/main.c,v retrieving revision 1.13 diff -u -p -r1.13 main.c --- main.c 23 Jun 2004 12:59:01 -0000 1.13 +++ main.c 19 Dec 2004 10:00:34 -0000 @ -21,6 +21,10 @@ static void objcdummyfunction( void ) { objc_msgSend(); } #endif +#ifdef __GNUC__ +extern void *main_frame_address; +#endif + int main(argc, argv, envp) int argc; @ -31,6 +35,10 @@ main(argc, argv, envp) #endif #if defined(__MACOS__) && defined(__MWERKS__) argc = ccommand(&argv); +#endif + +#ifdef __GNUC__ + main_frame_address = __builtin_frame_address(0); #endif ruby_init(); Index: eval.c =================================================================== RCS file: /src/ruby/eval.c,v retrieving revision 1.747 diff -u -p -r1.747 eval.c --- eval.c 16 Dec 2004 15:01:48 -0000 1.747 +++ eval.c 19 Dec 2004 09:58:18 -0000 @ -3865,7 +3865,7 @@ rb_eval(self, n) break; default: - rb_bug("unknown node type %d", nd_type(node)); + rb_bug("unknown node type %d (0x%lx)", nd_type(node), (long)node); } finish: CHECK_INTS;
GC が起きたところを同定しなくても、 SEGV が起きたあたりに GC を入れてみる、というのでも済むかも知れない?
いや、unknown node type 0 や called on terminated object でひっかかったときには、そこに GC を入れてもしょうがないか。
% google-count 'called on terminated object' 'unknown node type 0' 175 called on terminated object 1410 unknown node type 0
called on terminated object のほうが少ない? core を吐かないから目立たないだけ?
つくりかけのもの
+--- ruby-core:03856.core.rb |+--- ruby-core:3742.exit.rb ||+--- ruby-core:3973.core.rb |||+--- ruby-dev:24301.core.rb ||||+--- ruby-dev:24303.core.rb |||||+--- ruby-dev:24310.core.rb ||||||+--- ruby-dev:24311.core.rb |||||||+--- ruby-dev:24315.core.rb ||||||||+--- ruby-dev:24320.core.rb |||||||||+--- ruby-dev:24325.core.rb ||||||||||+--- ruby-dev:24332.core.rb |||||||||||+--- ruby-dev:24333.core.rb ||||||||||||+--- ruby-dev:24335.core.rb |||||||||||||+--- ruby-dev:24342.exit.rb ||||||||||||||+--- ruby-dev:24345.exit.rb |||||||||||||||+--- ruby-dev:24346.exit.rb ||||||||||||||||+--- ruby-dev:24348.core.rb |||||||||||||||||+--- ruby-dev:24366.core.rb ||||||||||||||||||+--- ruby-dev:24368.core.rb |||||||||||||||||||+--- ruby-dev:24371.core.rb ||||||||||||||||||||+--- ruby-dev:24373.core.rb |||||||||||||||||||||+--- ruby-dev:24375.core.rb ||||||||||||||||||||||+--- ruby-dev:24377.core.rb |||||||||||||||||||||||+--- ruby-dev:24378.core.rb ||||||||||||||||||||||||+--- ruby-dev:24381.core.rb |||||||||||||||||||||||||+--- ruby-dev:24382.core.rb ||||||||||||||||||||||||||+--- ruby-dev:24383.exit.rb |||||||||||||||||||||||||||+--- ruby-dev:24385.exit.rb ||||||||||||||||||||||||||||+--- ruby-dev:24386.core.rb |||||||||||||||||||||||||||||+--- ruby-dev:24395.exit.rb ||||||||||||||||||||||||||||||+--- ruby-dev:24398.exit.rb |||||||||||||||||||||||||||||||+--- ruby-dev:24399.core.rb ||||||||||||||||||||||||||||||||+--- ruby-dev:24400.core.rb |||||||||||||||||||||||||||||||||+--- ruby-dev:24404.core.rb ||||||||||||||||||||||||||||||||||+--- ruby-dev:24408.exit.rb |||||||||||||||||||||||||||||||||||+--- ruby-dev:24432.core.rb ||||||||||||||||||||||||||||||||||||+--- ruby-dev:24434.core.rb |||||||||||||||||||||||||||||||||||||+--- ruby-dev:24438.core.rb ||||||||||||||||||||||||||||||||||||||+--- ruby-dev:24439.exit.rb |||||||||||||||||||||||||||||||||||||||+--- ruby-dev:24440.exit.rb ||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:24445.core.rb |||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:24454.core.rb ||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:24460.exit.rb |||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:24461.core.rb ||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:24463.core.rb |||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:24467.exit.rb ||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:24476.core.rb |||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:24479.core.rb ||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:24487.core.rb |||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:24490.core.rb ||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:24492.core.rb |||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:24499.core.rb ||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:24503.core.rb |||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:24510.core.rb ||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:24515.core.rb |||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:24519.exit.rb ||||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:24526.exit.rb |||||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:24529.core.rb ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:24530.core.rb |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:24540.core.rb ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:24548.core.rb |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:24552-read.core.rb ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:24552-readall.core.rb |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:24558.exit.rb ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:24562.core.rb |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:24565.exit.rb ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:24568.core.rb |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:24579.core.rb ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:24587.exit.rb |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:24594.core.rb ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:24621.core.rb |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:24624.core.rb ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:24627.core.rb |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:24642.core.rb ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:24643.core.rb |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:24649.core.rb ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:24656.core.rb |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:24670.exit.rb ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:24671.core.rb |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:24687.core.rb ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:24705.core.rb |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:24747-bind.exit.rb ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:24747-connect.exit.rb |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:24749.core.rb ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:24766.core.rb |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:24768.exit.rb ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:24783.exit.rb |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:24801.core.rb ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:24827.core.rb |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:24847.core.rb ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:24861.core.rb |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:24878.core.rb ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:24887.exit.rb |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:24901.core.rb ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:24919.core.rb |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:24931.core.rb ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:24940.core.rb |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:24941.core.rb ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:24947.core.rb |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:24952.core.rb ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:24955.core.rb |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:24959.core.rb ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:24961.exit.rb |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:24962.exit.rb ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:24963.exit.rb |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:24964.core.rb ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:24965.exit.rb |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:24985.core.rb ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:24992.core.rb |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:25003.core.rb ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:25019.core.rb |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:25032.core.rb ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:25039.core.rb |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:25045.core.rb ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:25057.core.rb |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:25081.core.rb ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:25104.core.rb |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:25132.core.rb ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:25149.core.rb |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:25150.core.rb ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:25152.core.rb |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:25152.exit.rb ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:25161.exit.rb |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:25187.core.rb ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:25207.exit.rb |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:25208.exit.rb ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:25226.core.rb |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:25242.core.rb ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:25249.core.rb |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||+--- ruby-dev:25251.core.rb |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||F|FF| trunk-20041220-000000 ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||F||F|FF| trunk-20041219-000000 |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||FFFF| trunk-20041218-000000 ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||F||FFFF| trunk-20041217-000000 ||F||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||FFFF| trunk-20041216-000000 ||F|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||F|FFFFF| trunk-20041215-000000 ||F|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||FFFFFFF| trunk-20041214-000000 ||F|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||FFFFFFF| trunk-20041213-000000 ||F|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||FFFFFFF| trunk-20041212-000000 ||F|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||FFFFFFF| trunk-20041211-000000 ||F|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||FFFFFFF| trunk-20041210-000000 ||F||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||F||||FFFFFFF| trunk-20041209-000000 ||F|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||FF||||FFFFFFF| trunk-20041208-000000 ||F||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||FFF||||FF||FFF| trunk-20041207-000000 ||F|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||FFFFFFF|FFFF||FFF| trunk-20041206-000000 ||F|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||FFFFFFF|FFFF||FFF| trunk-20041204-000000 ||F||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||FFFFFFFF|||FF||FFF| trunk-20041203-000000 ||F|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||FFFFFFFFF|||FF||FFF| trunk-20041202-000000 ||F||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||FFFFFFFFFF|||FF||FFFF trunk-20041201-000000 F|F|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||FFFFFFFFFFF|||FF||FFFF trunk-20041130-000000 F|F||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||FF|FFFFFFFFF|FFFF||FFFF trunk-20041129-000000 F|F|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||F||||||||||||||FF|FFFFFFFFF|FFFF||FFFF trunk-20041128-000000 F|F|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||F||||||||||||FFFF|FFFFFFFFF|FFFF||FFFF trunk-20041127-000000 F|F|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||F||||||||F|FFFFFF|FFFFFFFFF|FFFF||FFFF trunk-20041126-000000 F|F|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||F|||||||FF|FFFFFF|FFFFFFFFF|FFFF||FFFF trunk-20041125-000000 F|F|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||F||||||F|F|||FFFF|FFFFFFFFF|FFFF||FFFF trunk-20041124-000000 F|F|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||F|||||FF|F|||FFFF|FFFFFFFFF|FFFF||FFFF trunk-20041123-000000 F|F|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||F||||FFF|F|||FFFF|FFFFFFFFF|FFFF||FFFF trunk-20041122-000000 F|F|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||F|||FFFF|F|||FFFF|FFFFFFFFF|FFFF||FFFF trunk-20041121-000000 F|F|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||F||FFFFF|F|||FFFF|FFFFFFFFF|FFFF||FFFF trunk-20041120-000000 F|F|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||F|FFFFFF|F|||FFFF|FFFFFFFFF|FFFF||FFFF trunk-20041119-000000 F|F|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||FFFFFFFF|F|||FFFF|FFFFFFFFF|FFFF||FFFF trunk-20041118-000000 F|F||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||FFFFFFFFF|F|||FFFF|FFFFFFFFF|FFFF||FFFF trunk-20041117-000000 FFF|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||FFFFFFFFFF|F|||FFFF|FFFFFFFFF|FFFF||FFFF trunk-20041116-000000 F|F|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||F|FFFFFFFFFFFF|F|||FFFF|FFFFFFFFF|FF|F||FFFF trunk-20041115-000000 F|F|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||F|FFFFFFFFFFFF|F|||FFFF|FFFFFFFFFFFFFF||FFFF trunk-20041114-000000 F|F|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||F|FFFFFFFFFFFF|F|||FFFF|FFFFFFFFFFFFFF||FFFF trunk-20041113-000000 F|F|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||F|FFFFFFFFFFFF|F|||FFFF|FFFFFFFFFFFFFF||FFFF trunk-20041112-000000 F|F|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||F|FFFFFFFFFFFF|F|||FFFF|FFFFFFFFFFFFFF||FFFF trunk-20041111-000000 F|F||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||FFFF|F|FFFFFFFFFFFF|F|||FFFF|FFFFFFFFFFFFFF||FFFF trunk-20041110-000000 F|F||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||FFFF|F|FFFFFFFFFFFF|F|||FFFF|FFFFFFFFFFFFFF||FFFF trunk-20041109-000000 F|F||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||FFFF|F|FFFFFFFFFFFF|F|||FFFF|FFFFFFFFFFFFFF||FFFF trunk-20041108-000000 F|F||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||FFFF|F|FFFFFFFFFFFF|F|||FFFF|FFFFFFFFFFFFFF||FFFF trunk-20041107-000000 F|F||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||FFFF|F|FFFFFFFFFFFF|F|||FFFF|FFFFFFFFFFFFFF||FFFF trunk-20041106-000000 F|F||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||FFFF|F|FFFFFFFFFFFF|F|||FFFF|FFFFFFFFFFFFFF||FFFF trunk-20041105-000000 F|F||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||FFFFFF|F|FFFF|FFFFFFF|F|||FFFF|FFFFFFFFFFFFFF||FFFF trunk-20041104-000000 F|F||||||||||||||||||||||||||F|||||||||||||||||||||||||||||||||||||||||||||||||FFFFFF|F|FFFF|FFFFFFF|F|||FFFF|FFFFFFFFFFFFFF||FFFF trunk-20041103-000000 F|F||||||||||||||||||||||||||F|||||||||||||||||||||||||||||||||||||||||||||||FFFFFFFF|F|FFFF|FFFFFFF|F|||FFFF|FFFFFFFFFFFFFF||FFFF trunk-20041102-000000 F|F||||||||||||||||||||||||||F|||||||||||||||||||||||||||||||FF||||||||||||FF|FFFFFFF|F|FFFF|FFFFFFF|F|||FFFF|FFFFFFFFFFFFFF||FFFF trunk-20041101-000000 F|F||||||||||||||||||||||||||F|||||||||||||||||||||||||||||||FF||||||||||||FF|FFFFFFF|F|FFFF|FFFFFFF|F|||FFFF|FFFFFFFFFFFFFF||FFFF trunk-20041031-000000 F|F||||||||||||||||||||||||||F|||||||||||||||||||||||||||||||FF||||||||||F|FF|FFFFFFF|F|FFFF|FFFFFFF|F|||FFFF|FFFFFFFFFFFFFF||FFFF trunk-20041030-000000 F|F||||||||||||||||||||||||||F|||||||||||||||||||||||||||||||FF|||||||||FF|FF|FFFFFFF|F|FFFF|FFFFFFF|F|||FFFF|FFFFFFFFFFFFFF||FFFF trunk-20041029-000000 F|F||||||||||||||||||||||||||F|||||||||||||||||||||||||||||||FF|||||||||FF|FF|FFFFFFF|F|FFFF|FFFFFFF|F|||FFFF|FFFFFFFFFFFFFF||FFFF trunk-20041028-000000 F|F||||||||||||||||||||||||||F|||||||||||||||||||||||||||||||FF||||F|F|FFF|FF|FFFFFFF|F||FFF|F||FFFF|F|||FFFF|FFFFFFFFFFFFFF||FFFF trunk-20041027-000000 F|F||||||||||||||||||||||||||F|||||||||||||||||||||||||||||||FF||||F|F|FFF|FF|FFFFFFF|F||FFF|F||FFFF|F|||FFFF|FFFFFFFFFFFFFF||FFFF trunk-20041026-000000 F|F||||||||||||||||||||||||||F|||||||||||||||||||||||||||||||FF||||FFF|FFF|FF|FFFFFFF|F||FFF|F||FFFF|F|||FFFF|FFFFFFFFFFFFFF||FFFF trunk-20041025-000000 F|F||||||||||||||||||||||||||F|||||||||||||||||||||||||||||||FF||||FFF|FFF|FF|FFFFFFF|F||FFF|F||FFFF|F|||FFFF|FFFFFFFFFFFFFF||FFFF trunk-20041024-000000 F|F||||||||||||||||||||||||||F|||||||||||||||||||||||||||||||FF|||FFFF|FFF|FF|FFFFFFF|F||FFF|F||FFFF|F|||FFFF|FFFFFFFFFFFFFF||FFFF trunk-20041023-000000 F|F||||||||||||||||||||||||||F||||||||||||||||||||||||||||||FFFFF|FFFF|FFF|FF|FFFFFFF|F||FFF|F||FFFF|F|||FFFF|FFFFFFFFFFFFFF||FFFF trunk-20041022-000000 F|F||||||||||||||||||||||||||F|||||F|||||||||||||FF|F|||FFFFFFFFF|FFFF|FFF|FF|FFFFFFF|F||FFF|F||FFFF|F|||FFFF|FF|FFFFFFFFFFF|||FFF trunk-20041020-000000 F|F|||||||||||||||F||||||||||F|||||F|||||F|FFFF|FFF|FFFFFF|F|F|F||FFFF|FFF|FF|FFFFFFF|F||FFF|F||FFFF|F||||FFF|FF|FFFF|FFFFFF||FFFF trunk-20041018-000000 F|F|||||||||||||||F||||||||||F|||||F|||||F|FFFF|FFF|FFFFFF|F|F|F||FFFF|FFF|FF|FFFFFFF|F||FFF|F||FFFF|F||||FFF|FF|FFFF|FFFFFF||FFFF trunk-20041017-000000 F|F|||||||||||||||F||||||||||F|||||F|||||F|FFFF|FFF|FFFFFF|F|F|F||FFFF|FFF|FF|FFFFFFF|F||FFF|F||FFFF|F||||FFF|FF|FFFF|FFFFFF||FFFF trunk-20041016-000000 F|F|||||||||||||||F||||||||||F|||||F|||||F|FFFF|FFF|FFFFFF|F|F|F||FFFF|FFF|FF|FFFFFFF|F||FFF|F||FFFF|F||||FFF|FF|FFFF|FFFFFF||FFFF trunk-20041015-000000 F|F|||||||||||||||F||||||||||F|||||F|||||F|FFFF|FFF|FFFFFF|F|F|F||FFFF|FFF|FF|FFFFFFF|F||FFF|F||FFFF|F||||FFF|FF|FFFF|FFFFFF||FFFF trunk-20041014-000000 F|F|||||||||||||||F||||||||||F|||||F|||||F|FFFF|FFF|FFFFFF|F|F|F||FFFF|FFF|FF|FFFFFFF|F||FFF|F||FFFF|F||||FFF|FF|FFFF|FFFFFF||FFFF trunk-20041013-000000 F|F|||||||||||||||F||||||||||F|||||F|||||F|FFFF|FFF|FFFFFF|F|F|F||FFFF|FFF|FF|FFFFFFF|F||FFF|F||FFFF|F||||FFF|FF|FFFF|FFFFFF||FFFF trunk-20041012-000000 F|F|||||||||||||||F||||||||||F|||||F|||||F|FFFF|FFF|FFFFFF|F|F|F||FFFF|FFF|FF|FFFFFFF|F||FFF|F||FFFF|F||||FFF|FF|FFFF|FFFFFF||FFFF trunk-20041011-000000 F|F|||||||||||||||F||||||||||F|||||F|||||F|FFFF|FFF|FFFFFF|F|F|F||FFFF|FFF|FF|FFFFFFF|F||FFF|F||FFFF|F||||FFF|FF|FFFF|FFFFFF||FFFF trunk-20041010-000000 F|F|||||||||||||||F||||||||||F|||||F|||||FFFFFF|FFF|FFFFFF|F|F|F||FFFF|FFF|FF|FFFFFFF|F||FFF|F||FFFF|F||||FFF|FF|FFFF|FFFFFF||FFFF trunk-20041009-000000 F|F|||||||||||||||F||||||||||F|||||F||||FFFFFFF|FFF|FFFFFF|F|F|F||FFFF|FFF|FF|FFFFFFF|F||FFF|F||FFFF|F||||FFF|FF|FFFF|FFFFFF||FFFF trunk-20041008-000000 F|F|||||||||||||||F||||||||||F|||||F|FFFFFFFFFF|FFF|FFFFFF|F|F|F||FFFF|FFF|FF|FFFFFFF|F||FFF|F||FFFF|F||||FFF|FF|FFFF|FFFFFF||FFFF trunk-20041007-000000 F|F|||||||||||||||F||||||||||F|||||FFFFFFFFFFFF|FFF|FFFFFF|F|F|F||FFFF|FFF|FF|FFFFFFF|F||FFF|F||FFFF|F||||FFF|FF|FFFF|FFFFFF||FFFF trunk-20041006-000000 F|F|||||||||||||||F||||||||||F|FFF|FFFFFFFFFFFF|FFF|FFFFFF|F|F|F||FFFF|FFF|FF|FFFFFFF|F||FFF|F||FFFF|F||||FFF|FF|FFFF|FFFFFF||FFFF trunk-20041005-000000 F|F|||||||||||||||F||||||||||F|FFFFFFFFFFFFFFFF|FFF|FFFFFF|F|F|F||FFFF|FFF|FF|FFFFFFF|F||FFF|F||FFFF|F||||FFF|FF|FFFF|FFFFFF||FFFF trunk-20041004-000000 F|F|||||||||||||||F||||||||||F|FFFFFFFFFFFFFFFF|FFF|FFFFFF|F|F|F||FFFF|FFF|FF|FFFFFFF|F||FFF|F||FFFF|F||||FFF|FF|FFFF|FFFFFF||FFFF trunk-20041003-000000 F|F||||||||||||||F|FFFFFFF|F||||FFFFFFF|FFFFFFF|FFF|FFFFFF|F|||F||FFFF|FFF|FF|FFFFFFF|F||FFF|F||FFFF|F||||FFF|FF|FFFF|FFFFFF||FFFF trunk-20041002-000000 F|F||||||||||||||F|FFFFFFF|F||||FFFFFFF|FFFFFFF|FFF|FFFFFF|F|||F||FFFF|FFF|FF|FFFFFFF|F||FFF|F||FFFF|F||||FFF|FF|FFFF|FFFFFF||FFFF trunk-20041001-000000 F|F||||||||||||||F|FFFFFFF|F||||FFFFFFF|FFFFFFF|FFF|FFFFFF|F|||F||FFFF|FFF|FF|FFFFFFF|F||FFF|F||FFFF|F||||FFF|FF|FFFF|FFFFFF||FFFF trunk-20040930-000000 F|F|||||||F|F|FFFFFFFFFFFF|F||||FFFFFFF|FFFFFFF|FFF|FFFFFF|F|||F||FFFF|FFF|FF|FFFFFFF|F||FFF|F||FFFF|F||||FFF|FF|FFFF|FFFFFF||FFFF trunk-20040929-000000 F|F|||||||F|F|FFFFFFFFFFFF|F||||FFFFFFF|FFFFFFF|FFF|FFFFFF|F|||F||FFFF|FFF|FF|FFFFFFF|F||FFF|F||FFFF|F||||FFF|FF|FFFF|FFFFFF||FFFF trunk-20040928-000000 F|F|||||||F|FFFFFFFFFFFFFF|F||F|FFFFFFF|FFFFFFF|FFF|FFFFFF|F|||F||FFFF|FFF|FF|FFFFFFF|F||FFF|F||FFFF|F||||FFF|FF|FFFF|FFFFFF||FFFF trunk-20040927-000000 F|F|||||||F|FFFFFFFFFFFFFF|F||F|FFFFFFF|FFFFFFF|FFF|FFFFFF|F|||F||FFFF|FFF|FF|FFFFFFF|F||FFF|F||FFFF|F||||FFF|FF|FFFF|FFFFFF||FFFF trunk-20040926-000000 F|F|F||FFFF|F||FFFFFFFFFFF|F||||FFFFFFF|FFFFFFF|FFF|FFFFFF|F|||F||FFFF|FFF|FF|FFFFFFF|F||FFF|F||FFFF|F||||FFF|FF|FFFF|FFFFFF||FFFF trunk-20040922-000000 F|F|F||FFFF|F||FFF|FFFFFFF|F|||FFFFFFFF|FFFFFFF|FFF|FFFFFF|F|||F||FFFF|FFF|FF|FFFFFFF|F||FFF|F||FFFF|F||||FFF|FF|FFFF|FFFFFF||FFFF trunk-20040921-000000 F|F|F||FFFF|F||FFFFFFFFFFF|F|||FFFFFFFF|FFFFFFF|FFF|FFFFFF|F|||F||FFFF|FFF|FF|FFFFFFF|F||FFF|F||FFFF|F||||FFF|FF|FFFF|FFFFFF||FFFF trunk-20040920-000000 F|F|F||FFFF|F||FFFFFFFFFFF|F|||FFFFFFFF|FFFFFFF|FFF|FFFFFF|F|||F||FFFF|FFF|FF|FFFFFFF|F||FFF|F||FFFF|F||||FFF|FF|FFFF|FFFFFF||FFFF trunk-20040919-000000 F|F|F||FFFF|F||FFFFFFFFFFF|F|||FFFFFFFF|FFFFFFF|FFF|FFFFFF|F|||F||FFFF|FFF|FF|FFFFFFF|F||FFF|F||FFFF|F||||FFF|FF|FFFF|FFFFFF||FFFF trunk-20040918-000000 F|F|F||FFFF|F||FFFFFFFFFFF|F|||FFFFFFFF|FFFFFFF|FFF|FFFFFF|F|||F||FFFF|FFF|FF|FFFFFFF|F||FFF|F||FFFF|F||||FFF|FF|FFFF|FFFFFF||FFFF trunk-20040917-000000 F|F|F||FFFF|F||FFFFFFFFFFF|F|||FFFFFFFF|FFFFFFF|FFF|FFFFFF|F|||F||FFFF|FFF|FF|FFFFFFF|F||FFF|F||FFFF|F||||FFF|FF|FFFF|FFFFFF||FFFF trunk-20040916-000000 F|F|F||FFFF|F||FFFFFFFFFFF|F|||FFFFFFFF|FFFFFFF|FFF|FFFFFF|F|||F||FFFF|FFF|FF|FFFFFFF|F||FFF|F||FFFF|F||||FFF|FF|FFFF|FFFFFF||FFFF trunk-20040915-000000 F|F|F||FFFF|F||FFFFFFFFFFF|F|||FFFFFFFF|FFFFFFF|FFF|FFFFFF|F|||F||FFFF|FFF|FF|FFFFFFF|F||FFF|F||FFFF|F||||FFF|FF|FFFF|FFFFFF||FFFF trunk-20040914-000000 F|F|F||FFFF|F||FFFFFFFFFFF|F|||FFFFFFFF|FFFFFFF|FFF|FFFFFF|F|||F||FFFF|FFF|FF|FFFFFFF|F||FFF|F||FFFF|F||||FFF|FF|FFFF|FFFFFF||FFFF trunk-20040913-000000 F|F|F||FFFF|F||FFFFFFFFFFF|F|||FFFFFFFF|FFFFFFF|FFF|FFFFFF|F|||F||FFFF|FFF|FF|FFFFFFF|F||FFF|F||FFFF|F||||FFF|FF|FFFF|FFFFFF||FFFF trunk-20040912-000000 F|F|F||FFFF|F||FFFFFFFFFFF|F|||FFFFFFFF|FFFFFFF|FFF|FFFFFF|F|||F||FFFF|FFF|FF|FFFFFFF|F||FFF|F||FFFF|F||||FFF|FF|FFFF|FFFFFF||FFFF trunk-20040911-000000 F|F|F||FFFF|F||FFFFFFFFFFF|F|||FFFFFFFF|FFFFFFF|FFF|FFFFFF|F|||F||FFFF|FFF|FF|FFFFFFF|F||FFF|F||FFFF|F||||FFF|FF|FFFF|FFFF|F||FFFF trunk-20040910-000000 F|F|F||FFFF|F||FFFFFFFFFFF|F|||FFFFFFFF|FFFFFFF|FFF|FFFFFF|F|||F||FFFF|FFF|FF|FFFFFFF|F||FFF|F||FFFF|F||||FFF|FF|FFFF|FFFF|F||FFFF trunk-20040909-000000 F|F|F||FFFF|F||FFFFFFFFFFF|F|||FFFFFFFF|FFFFFFF|FFF|FFFFFF|F|||F||FFFF|FFF|FF|FFFFFFF|F||FFF|F||FFFF|F||||FFF|FF|FFFF|FFFF|F||FFFF trunk-20040908-000000 F|F|F||FFFF|F||FFFFFFFFFFF|F|||FFFFFFFF|FFFFFFF|FFF|FFFFFF|F|||F||FFFF|FFF|FF|FFFFFFF|F||FFF|F||FFFF|F||||FFF|FF|FFFF|FFFF|F||FFFF trunk-20040907-000000 F|F|F||FFFF|F||FFFFFFFFFFF|F|||FFFFFFFF|FFFFFFF|FFF|FFFFFF|F|||F||FFFF|FFF|FF|FFFFFFF|F||FFF|F||FFFF|F||||FFF|FF|FFFF|FFFF|F||FFFF trunk-20040906-000000 F|F|F||FFFF|F||FFFFFFFFFFF|F|||FFFFFFFF|FFFFFFF|FFF|FFFFFF|F|||F||FFFF|FFF|FF|FFFFFFF|F||FFF|F||FFFF|F||||FFF|FF|FFFF|FFFF|F||FFFF trunk-20040905-000000 F|F|F||FFFF|F||FFFFFFFFFFF|F|||FFFFFFFF|FFFFFFF|FFF|FFFFFF|F|||F||FFFF|FFF|FF|FFFFFFF|F||FFF|F||FFFF|F||||FFF|FF|FFFF|FFFF|F||FFFF trunk-20040904-000000 F|F|F||FFFF|F||FFFFFFFFFFF|F|||FFFFFFFF|FFFFFFF|FFF|FFFFFF|F|||F||FFFF|FFF|FF|FFFFFFF|F||FFF|F||FFFF|F||||FFF|FF|FFFF|FFFF|F||FF|F trunk-20040903-000000 F|F|F||FFFF|F||FFFFFFFFFFF|F|||FFFFFFFF|FFFFFFF|FFF|FFFFFF|F|||F||FFFF|FFF|FF|FFFFFFF|F||FFF|F||FFFF|F||||FFF|FF|FFFF|FFFF|F||FF|F trunk-20040902-000000 F|F|F||FFFF|F||FFFFFFFFFFF|F|||FFFFFFFF|FFFFFFF|FFF|FFFFFF|F|||F||FFFF|FFF|FF|FFFFFFF|F||FFF|F||FFFF|F||||FFF|FF|FFFF|FFFF|F||FF|F trunk-20040901-000000 ||F|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||FFF||||||F 1.8-20041220-000000 ||F|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||FFF||||||F 1.8-20041219-000000 ||F|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||FFF|FFFF|F 1.8-20041218-000000 ||F|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||FFF|FFFF|F 1.8-20041217-000000 ||F|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||FFF|FFFF|F 1.8-20041216-000000 ||F|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||FFF|FFFF|F 1.8-20041215-000000 ||F|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||FFFFFFFF|F 1.8-20041214-000000 ||F|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||FFFFFFFF|F 1.8-20041213-000000 ||F|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||FFFFFFFF|F 1.8-20041212-000000 ||F||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||FFFFFFFFF|F 1.8-20041211-000000 ||F|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||FFFFFFFFFF|F 1.8-20041210-000000 ||F||||||||||||||||||||||||||||||||||||||||||F||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||FFFFFFFFFF|F 1.8-20041209-000000 ||F||||||||||||||||||||||||||||||||||||||||||F||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||F|FFFF|FFFFF|F 1.8-20041208-000000 ||F||||||||||||||||||||||||||||||||||||||||||F||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||FFFFF|FFFFFF||FF|F 1.8-20041207-000000 ||F||||||||||||||||||||||||||||||||||||||||||F||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||FFFFF|FFFF|F||FF|F 1.8-20041206-000000 ||F||||||||||||||||||||||||||||||||||||||||||F||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||FFFFF|FFFFFF||FF|F 1.8-20041205-000000 ||F||||||||||||||||||||||||||||||||||||||||||F||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||FF||FFFFF|FFFFFF||FF|F 1.8-20041204-000000 ||F||||||||||||||||||||||||||||||||||||||||||F||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||FFFFFFF|FFFFFF||FF|F 1.8-20041203-000000 ||F||||||||||||||||||||||||||||||||||||||||||F||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||FFFFFFF|FFFF|F||FF|F 1.8-20041202-000000 ||F||||||||||||||||||||||||||||||||||||||||||F||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||FFFFFFF|FFFFFF||FF|F 1.8-20041201-000000 ||F||||||||||||||||||||||||||||||||||||||||||F||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||FFFFFFF|FFFFFF||FF|F 1.8-20041130-000000 ||F||||||||||||||||||||||||||||||||||||||||||F|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||F||FFFFFFF|FFFFFF||FF|F 1.8-20041129-000000 ||F||||||||||||||||||||||||||||||||||||||||||F|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||F||FFFFFFF|FFFFFF||FF|F 1.8-20041128-000000 ||F||||||||||||||||||||||||||||||||||||||||||F|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||FFF||FFFFFFF|FFFF|F||FF|F 1.8-20041127-000000 ||F||||||||||||||||||||||||||||||||||||||||||F|||||||||||||||||||||||||||||||||||||||||||||||||||||||F|||FFF||FFFFFFF|FFFFFF||FF|F 1.8-20041126-000000 ||F||||||||||||||||||||||||||||||||||||||||||F||||||||||||||||||||||||||||||||||||||||||||||||||||||FF|||FFF||FFFFFFF|FFFF|F||FF|F 1.8-20041125-000000 ||F||||||||||||||||||||||||||||||||||||||||||F|||||||||||||||||||||||||||||||||||||||||||||||||||||F|F|||FFF||FFFFFFF|FFFFFF||FF|F 1.8-20041124-000000 ||F||||||||||||||||||||||||||||||||||||||||||F||||||||||||||||||||||||||||||||||||||||||F|||||FF|FFF|F|||FFF||FFFFFFF|FFFFFF||FF|F 1.8-20041123-000000 ||F||||||||||||||||||||||||||||||||||||||||||F||||||||||||||||||||||||||||||||||||||||||F|||||FF|FFF|F|||FFF||FFFFFFF|FFFF|F||FF|F 1.8-20041122-000000 ||F||||||||||||||||||||||||||||||||||||||||||F||||||||||||||||||||||||||||||||||||||||||F|||||FF|FFF|F|||FFF||FFFFFFF|FFFFFF||FF|F 1.8-20041121-000000 ||F||||||||||||||||||||||||||||||||||||||||||F||||||||||||||||||||||||||||||||||||||||||F|||||FF|FFF|F|||FFF||FFFFFFF|FFFFFF||FF|F 1.8-20041120-000000 ||F||||||||||||||||||||||||||||||||||||||||||F||||||||||||||||||||||||||||||||||||||||||F|||||FF|FFF|F|||FFF||FFFFFFF|FFFF|F||FF|F 1.8-20041119-000000 ||F||||||||||||||||||||||||||||||||||||||||||F||||||||||||||||||||||||||||||||||||||||||F||F|FFF|FFF|F|||FFF||FFFFFFF|FFFFFF||FF|F 1.8-20041118-000000 ||F||||||||||||||||||||||||||||||||||||||||||F||||||||||||||||||||||||||||||||||||||||||F||F|FFF|FFF|F|||FFF||FFFFFFF|FFFF|F||FF|F 1.8-20041117-000000 ||F||||||||||||||||||||||||||||||||||||||||||F||||||||||||||||||||||||||||||||||||||||||F|FF|FFF|FFF|F|||FFF||FFFFFFF|FFFF|F||FF|F 1.8-20041116-000000 ||F||||||||||||||||||||||||||||||||||||||||||F||||||||||||||||||||||||||||||||||||||||F|FFFF|FFF|FFF|F|||FFF||FFFFFFF|FFFF|F||FF|F 1.8-20041115-000000 ||F||||||||||||||||||||||||||||||||||||||||||F||||||||||||||||||||||||||||||||||||||||F|FFFF|FFF|FFF|F|||FFF||FFFFFFF|FFFF|F||FF|F 1.8-20041114-000000 ||F||||||||||||||||||||||||||||||||||||||||||F||||||||||||||||||||||||||||||||||||||||F|FFFF|FFF|FFF|F|||FFF||FFFFFFF|FFFF|F||FF|F 1.8-20041113-000000 ||F||||||||||||||||||||||||||||||||||||||||||F||||||||||||||||||||||||||||||||||||||||F|FFFF|FFF|FFF|F|||FFF||FFFFFFF|FFFF|F||FF|F 1.8-20041112-000000 |||||||||||||||||||||||||||||||||||||||||||||F|||||||||||||||||||F|||||||||||||||FF|||F|F|FF|FFF|FFF|F|||FF|||FF|||FF||FFFF|FF|F|F 1.8-20041111-000000 ||F||||||||||||||||||||||||||||||||||||||||||F|||||||||||||||||||||||||||||||||||FF|||F|FFFF|FFF|FFF|F|||FFF||FFFFFFF|FFFFFF||FF|F 1.8-20041110-000000 ||F||||||||||||||||||||||||||||||||||||||||||F|||||||||||||||||||||||||||||||||||FF|||F|FFFF|FFF|FFF|F|||FFF||FFFFFFF|FFFFFF||FF|F 1.8-20041109-000000 ||F||||||||||||||||||||||||||||||||||||||||||F|||||||||||||||||||||||||||||||||||FF|||F|FFFF|FFF|FFF|F|||FFF||FFFFFFF|FFFF|F||FF|F 1.8-20041108-000000 ||F||||||||||||||||||||||||||||||||||||||||||F|||||||||||||||||||||||||||||||||||FF|||F|FFFF|FFF|FFF|F|||FFF||FFFFFFF|FFFF|F||FF|F 1.8-20041107-000000 ||F||||||||||||||||||||||||||||||||||||||||||F|||||||||||||||||||||||||||||||||||FF|||F|FFFF|FFF|FFF|F|||FFF||FFFFFFF|FFFF|F||FF|F 1.8-20041106-000000 ||F||||||||||||||||||||||||||||||||||||||||||F|||||||||||||||||||||||||||||||||||FF|||F|FFFF|FFF|FFF|F|||FFF||FFFFFFF|FFFFFF||FF|F 1.8-20041105-000000 ||F||||||||||||||||||||||||||F|||||||||||F|||F||||||||||||||||||||||||||||||F||FFFF|||F|FFFF|FFF|FFF|F|||FFF||FFFFFFF|FFFFFF||FF|F 1.8-20041104-000000 ||F||||||||||||||||||||||||||F|||||||||||F|||F||||||||||||||||||||||||||||||F||FFFF|||F|FFFF|FFF|FFF|F|||FFF||FFFFFFF|FFFFFF||FF|F 1.8-20041103-000000 ||F||||||||||||||||||||||||||F|||||||||||||||F||||||||||||||||||||||||||||||F|FFFFF|||F|FFFF|FFF|FFF|F|||FFF||FFFFFFF|FFFF|F||FF|F 1.8-20041102-000000 ||F||||||||||||||||||||||||||F|||||||||||||||F||||||||||||||||||||||||||||||F|FFFFF|||F|FFFF|FFF|FFF|F|||FFF||FFFFFFF|FFFF|F||FF|F 1.8-20041101-000000 ||F||||||||||||||||||||||||||F|||||||||||||||F|||||||||||||||FF||||||||||F||F|FFFFF|||F|FFFF|FFF|FFF|F|||FFF||FFFFFFF|FFFFFF||FF|F 1.8-20041031-000000 ||F||||||||||||||||||||||||||F|||||||||||||||F|||||||||||||||FF||||||||||F||F|FFFFF|||F|FFFF|FFF|FFF|F|||FFF||FFFFFFF|FFFF|F||FF|F 1.8-20041030-000000 ||F||||||||||||||||||||||||||F|||||||||||||||F|||||||||||||||FF||||F||||FF||F|FFFFF|||F|FFFF|FFF|FFF|F|||FFF||FFFFFFF|FFFF|F||FF|F 1.8-20041029-000000 ||F||||||||||||||||||||||||||F|||||||||||||||F|||||||||||||||FF||||F||F|FF||F|FFFFF|||F|FFFF|FFF|FFF|F|||FFF||FFFFFFF|FFFF|F||FF|F 1.8-20041028-000000 ||F||||||||||||||||||||||||||F|||||||||||||||F|||||||||||||||FF||||F|F||FF||F|FFFFF|||F||FFF|F|||FFF|F|||FFF||FFFFFFF|FFFFFF||FF|F 1.8-20041027-000000 ||F||||||||||||||||||||||||||F|||||||||||||||F|||||||||||||||FF||||F|F||FF||F|FFFFF|||F||FFF|F|||FFF|F|||FFF||FFFFFFF|FFFFFF||FF|F 1.8-20041026-000000 ||F||||||||||||||||||||||||||F|||||||||||||||F|||||||||||||||FF||||FFF||FF||F|FFFFF|||F||FFF|F|||FFF|F|||FFF||FFFFFFF|FFFFFF||FF|F 1.8-20041025-000000 ||F||||||||||||||||||||||||||F|||||||||||||||F|||||||||||||||FF||||FFF||FF||F|FFFFF|||F||FFF|F|||FFF|F|||FFF||FFFFFFF|FFFFFF||FF|F 1.8-20041024-000000 ||F||||||||||||||||||||||||||F|||||||||||||||F|||||||||||||||FF||||FFF||FF||F|FFFFF|||F||FFF|F|||FFF|F|||FFF||FFFFFFF|FFFFFF||FF|F 1.8-20041023-000000 ||F||||||||||||||||||||||||||F|||||||||||||||F||||||||||||||FFFFF||FFF||FF||F|FFFFF|||F||FFF|F|||FFF|F|||FFF||FFFFFFF|FFFF|F||FF|F 1.8-20041022-000000 ||F||||||||||||||||||||||||||F|||||||||||||||F||||||||||||||FFFFF||FFF||FF||F|FFFFF|||F||FFF|F|||FFF|F|||FFF||FFFFFFF|FFFF|F||FF|F 1.8-20041021-000000 ||F|||||||||||FFF|F|||||||||FF|F|||F|||||||||F|||FF|F|||FFF|FFFFF||FFF||FF||F|FFFFF|||F||FFF|F|||FFF|F|||FFF||FF|FFFF|FFFF|F|||F|F 1.8-20041020-000000 ||F|||||||||||FFF|F|||||||||FF|F|||F|||||||FF|FF|FFFFFF|FF|||F|F|||FFF||FF||F|FFFFF|||F||FFF|F|||FFF|F|||FFF||FF|FFFF|FFFFFF||FF|F 1.8-20041018-000000 ||F|||||||||||FFF|F|||||||||FF|F|||F|||||||FF|FF|FFFFFF|FF|||F|F|||FFF||FF||F|FFFFF|||F||FFF|F|||FFF|F|||FFF||FF|FFFFFFFFFFF||FF|F 1.8-20041017-000000 ||F|||||||||||FFF|F|||||||||FF|F|||F|||||||FF|FF|FFFFFF|FF|||F|F|||FFF||FF||F|FFFFF|||F||FFF|F|||FFF|F|||FFF||FF|FFFFFFFFF|F||FF|F 1.8-20041016-000000 ||F|||||||||||FFF|F|||||||||FF|F|||F|||||||FF|FF|FFFFFF|FF|||F|F|||FFF||FF||F|FFFFF|||F||FFF|F|||FFF|F|||FFF||FF|FFFFFFFFFFF||FF|F 1.8-20041015-000000 ||F|||||||||||FFF|F|||||||||FF|F|||F|||||||FF|FF|FFFFFF|FF|||F|F|||FFF||FF||F|FFFFF|||F||FFF|F|||FFF|F|||FFF||FF|FFFFFFFFF|F||FF|F 1.8-20041014-000000 ||F|||||||||||FFF|F|||||||||FF|F|||F|||||||FF|FF|FFFFFF|FF|||F|F|||FFF||FF||F|FFFFF|||F||FFF|F|||FFF|F|||FFF||FF|FFFFFFFFFFF||FF|F 1.8-20041013-000000 ||F|||||||||||FFF|F|||||||||FF|F|||F|||||||FF|FF|FFFFFF|FF|||F|F|||FFF||FF||F|FFFFF|||F||FFF|F|||FFF|F|||FFF||FF|FFFFFFFFFFF||FF|F 1.8-20041012-000000 ||F|||||||||||FFF|F|||||||||FF|F|||F|||||||FF|FF|FFFFFF|FF|||F|F|||FFF||FF||F|FFFFF|||F||FFF|F|||FFF|F|||FFF||FF|FFFFFFFFFFF||FF|F 1.8-20041011-000000 ||F|||||||||||FFF|F|||||||||FF|F|||F|||||||FF|FF|FFFFFF|FF|||F|F|||FFF||FF||F|FFFFF|||F||FFF|F|||FFF|F|||FFF||FF|FFFFFFFFFFF||FF|F 1.8-20041010-000000 ||F|||||||||||FFF|F|||||||||FF|F|||F||||||FFF|FF|FFFFFF|FF|||F|F|||FFF||FF||F|FFFFF|||F||FFF|F|||FFF|F|||FFF||FF|FFFFFFFFFFF||FF|F 1.8-20041009-000000 ||F|||||||||||FFF|F|||||||||FF|F|||F||||F|FFF|FF|FFFFFF|FF|||F|F|||FFF||FF||F|FFFFF|||F||FFF|F|||FFF|F|||FFF||FF|FFFFFFFFFFF||FF|F 1.8-20041008-000000 ||F||||||||||FFFF|F||||||F|FF|FFFF|FFFFFF|FFF|FF|FFFFFF|FF|||F|F|||FFF||FF||F|FFFFF|||F||FFF|F|||FFF|F|||FFF||FF|FFFFFFFFF|F||FF|F 1.8-20041007-000000 ||F||||||||||FFFF|F||||||F|FF|FFFF|FFFFFF|FFF|FF|FFFFFF|FF|||F|F|||FFF||FF||F|FFFFF|||F||FFF|F|||FFF|F|||FFF||FF|FFFFFFFFF|F||FF|F 1.8-20041006-000000 ||F||||||||||FFFF|F||||||F|FF|FFFF|FFFFFF|FFF|FF|FFFFFF|FF|||F|F|||FFF||FF||F|FFFFF|||F||FFF|F|||FFF|F|||FFF||FF|FFFFFFFFF|F||FF|F 1.8-20041005-000000 ||F||||||||||FFFF|F||||||F|FF|FFFFFFFFFFF|FFF|FF|FFFFFF|FF|||F|F|||FFF||FF||F|FFFFF|||F||FFF|F|||FFF|F|||FFF||FF|FFFFFFFFF|F||FF|F 1.8-20041004-000000 ||F||||||||||FFFF|F||||||F|FF|FFFFFFFFFFF|FFF|FF|FFFFFF|FF|||F|F|||FFF||FF||F|FFFFF|||F||FFF|F|||FFF|F|||FFF||FF|FFFFFFFFFFF||FF|F 1.8-20041003-000000 ||F|||||FFF|F||FFF|FF|F|FF|F||||FFFFFFF|F|FFF|FF|FFFFFF|FF|||||F|||FFF||FF||F|FFFFF|||F||FFF|F|||FFF|F|||FFF||FF|FFFFFFFFFFF||FF|F 1.8-20041002-000000 ||F|||||FFF|F||FFF|FF|F|FF|F||||FFFFFFF|F|FFF|FF|FFFFFF|FF|||||F|||FFF||FF||F|FFFFF|||F||FFF|F|||FFF|F|||FFF||FF|FFFFFFFFFFF||FF|F 1.8-20041001-000000 ||F|||||FFF|F||FFF|FF|F|FF|F||||FFFFFFF|F|FFF|FF|FFFFFF|FF|||||F|||FFF||FF||F|FFFFF|||F||FFF|F|||FFF|F|||FFF||FF|FFFFFFFFFFF||FF|F 1.8-20040930-000000 ||F|||||FFF|F||FFFFFF|F|FF|F||||FFFFFFF|F|FFF|FF|FFFFFF|FF|||||F|||FFF||FF||F|FFFFF|||F||FFF|F|||FFF|F|||FFF||FF|FFFFFFFFF|F||FF|F 1.8-20040929-000000 ||F|||||FFF|F||FFFFFF|F|FF|F||||FFFFFFF|F|FFF|FF|FFFFFF|FF|||||F|||FFF||FF||F|FFFFF|||F||FFF|F|||FFF|F|||FFF||FF|FFFFFFFFFFF||FF|F 1.8-20040928-000000 ||F|||||FFF|F||FFFFFF|F|FF|F||||FFFFFFF|F|FFF|FF|FFFFFF|FF|||||F|||FFF||FF||F|FFFFF|||F||FFF|F|||FFF|F|||FFF||FF|FFFFFFFFFFF||FF|F 1.8-20040927-000000 ||F|||||FFF|F||FFFFFF|F|FF|F||||FFFFFFF|F|FFF|FF|FFFFFF|FF|||||F|||FFF||FF||F|FFFFF|||F||FFF|F|||FFF|F|||FFF||FF|FFFFFFFFFFF||FF|F 1.8-20040926-000000 ||F|||||FFF|F||FFFFFF|F|FF|F||||FFFFFFF|F|FFF|FF|FFFFFF|FF|||||F|||FFF||FF||F|FFFFF|||F||FFF|F|||FFF|F|||FFF||FF|FFFFFFFFFFF||FF|F 1.8-20040925-000000 ||F|||||FFF|F||FFFFFF|F|FF|F||||FFFFFFF|F|FFF|FF|FFFFFF|FF|||||F|||FFF||FF||F|FFFFF|||F||FFF|F|||FFF|F|||FFF||FF|FFFFFFFFFFF||FF|F 1.8-20040924-000000 ||F|||||FFF|F||FFFFFF|F|FF|F||||FFFFFFF|F|FFF|FF|FFFFFF|FF|||||F|||FFF||FF||F|FFFFF|||F||FFF|F|||FFF|F|||FFF||FF|FFFFFFFFF|F||FF|F 1.8-20040923-000000 ||F|F|||FFF|F||FFFFFF|F|FF|F||||FFFFFFF|F|FFF|FF|FFFFFF|FF|||||F|||FFF||FF||F|FFFFF|||F||FFF|F|||FFF|F|||FFF||FF|FFFFFFFFFFF||FF|F 1.8-20040922-000000 ||F|F|||FFF|F||FFFFFF|F|FF|F|||FFFFFFFF|F|FFF|FF|FFFFFF|FF|||||F|||FFF||FF||F|FFFFF|||F||FFF|F|||FFF|F|||FFF||FF|FFFFFFFFFFF||FF|F 1.8-20040921-000000 ||F|F|||FFF|F||FFFFFF|F|FF|F|||FFFFFFFF|F|FFF|FF|FFFFFF|FF|||||F|||FFF||FF||F|FFFFF|||F||FFF|F|||FFF|F|||FFF||FF|FFFFFFFFFFF||FF|F 1.8-20040920-000000 ||F|F|||FFF|F||FFFFFF|F|FF|F|||FFFFFFFF|F|FFF|FF|FFFFFF|FF|||||F|||FFF||FF||F|FFFFF|||F||FFF|F|||FFF|F|||FFF||FF|FFFFFFFFFFF||FF|F 1.8-20040919-000000 ||F|F|||FFF|F||FFFFFF|F|FF|F|||FFFFFFFF|F|FFF|FF|FFFFFF|FF|||||F|||FFF||FF||F|FFFFF|||F||FFF|F|||FFF|F|||FFF||FF|FFFFFFFFFFF||FF|F 1.8-20040918-000000 ||F|F|||FFF|F||FFFFFF|F|FF|F|||FFFFFFFF|F|FFF|FF|FFFFFF|FF|||||F|||FFF||FF||F|FFFFF|||F||FFF|F|||FFF|F|||FFF||FF|FFFFFFFFFFF||FF|F 1.8-20040917-000000 ||F|F|||FFF|F||FFFFFF|F|FF|F|||FFFFFFFF|F|FFF|FF|FFFFFF|FF|||||F|||FFF||FF||F|FFFFF|||F||FFF|F|||FFF|F|||FFF||FF|FFFFFFFFFFF||FF|F 1.8-20040916-000000 ||F|F|||FFF|F||FFFFFF|F|FF|F|||FFFFFFFF|F|FFF|FF|FFFFFF|FF|||||F|||FFF||FF||F|FFFFF|||F||FFF|F|||FFF|F|||FFF||FF|FFFFFFFFF|F||FF|F 1.8-20040915-000000 ||F|F|||FFF|F||FFFFFF|F|FF|F|||FFFFFFFF|F|FFF|FF|FFFFFF|FF|||||F|||FFF||FF||F|FFFFF|||F||FFF|F|||FFF|F|||FFF||FF|FFFFFFFFFFF||FF|F 1.8-20040914-000000 ||F|F|||FFF|F||FFFFFF|F|FF|F|||FFFFFFFF|F|FFF|FF|FFFFFF|FF|||||F|||FFF||FF||F|FFFFF|||F||FFF|F|||FFF|F|||FFF||FF|FFFFFFFFFFF||FF|F 1.8-20040913-000000 ||F|F|||FFF|F||FFFFFF|F|FF|F|||FFFFFFFF|F|FFF|FF|FFFFFF|FF|||||F|||FFF||FF||F|FFFFF|||F||FFF|F|||FFF|F|||FFF||FF|FFFFFFFFFFF||FF|F 1.8-20040912-000000 ||F|F|||FFF|F||FFFFFF|F|FF|F|||FFFFFFFF|F|FFF|FF|FFFFFF|FF|||||F|||FFF||FF||F|FFFFF|||F||FFF|F|||FFF|F|||FFF||FF|FFFFFFFFFFF||FF|F 1.8-20040911-000000 ||F|F|||FFF|F||FFFFFF|F|FF|F|||FFFFFFFF|F|FFF|FF|FFFFFF|FF|||||F|||FFF||FF||F|FFFFF|||F||FFF|F|||FFF|F|||FFF||FF|FFFFFFFFFFF||FF|F 1.8-20040910-000000 ||F|F|||FFF|F||FFFFFF|F|FF|F|||FFFFFFFF|F|FFF|FF|FFFFFF|FF|||||F|||FFF||FF||F|FFFFF|||F||FFF|F|||FFF|F|||FFF||FF|FFFFFFFFFFF||FF|F 1.8-20040909-000000 ||F|F|||FFF|F||FFFFFF|F|FF|F|||FFFFFFFF|F|FFF|FF|FFFFFF|FF|||||F|||FFF||FF||F|FFFFF|||F||FFF|F|||FFF|F|||FFF||FF|FFFFFFFFFFF||FF|F 1.8-20040908-000000 ||F|F|||FFF|F||FFFFFF|F|FF|F|||FFFFFFFF|F|FFF|FF|FFFFFF|FF|||||F|||FFF||FF||F|FFFFF|||F||FFF|F|||FFF|F|||FFF||FF|FFFFFFFFF|F||FF|F 1.8-20040907-000000 ||F|F|||FFF|F||FFFFFF|F|FF|F|||FFFFFFFF|F|FFF|FF|FFFFFF|FF|||||F|||FFF||FF||F|FFFFF|||F||FFF|F|||FFF|F|||FFF||FF|FFFFFFFFF|F||FF|F 1.8-20040906-000000 ||F|F|||FFF|F||FFFFFF|F|FF|F|||FFFFFFFF|F|FFF|FF|FFFFFF|FF|||||F|||FFF||FF||F|FFFFF|||F||FFF|F|||FFF|F|||FFF||FF|FFFFFFFFF|F||FF|F 1.8-20040905-000000 ||F|F|||FFF|F||FFFFFF|F|FF|F|||FFFFFFFF|F|FFF|FF|FFFFFF|FF|||||F|||FFF||FF||F|FFFFF|||F||FFF|F|||FFF|F|||FFF||FF|FFFFFFFFFFF||FF|F 1.8-20040904-000000 ||F|F|||FFF|F||FFFFFF|F|FF|F|||FFFFFFFF|F|FFF|FF|FFFFFF|FF|||||F|||FFF||FF||F|FFFFF|||F||FFF|F|||FFF|F|||FFF||FF|FFFFFFFFFFF||FF|F 1.8-20040903-000000 ||F|F|||FFF|F||FFFFFF|F|F||F|||FFFFFFFF|F|FFF|FF|FFFFFF|FF|||||F|||FFF||FF||F|FFFFF|||F||FFF|F|||FFF|F|||FFF||FF|FFFFFFFFF|F||FF|F 1.8-20040902-000000 ||F|F|||FFF|F||FFFFFF|F|F||F|||FFFFFFFF|F|FFF|FF|FFFFFF|FF|||||F|||FFF||FF||F|FFFFF|||F||FFF|F|||FFF|F|||FFF||FF|FFFFFFFFFFF||FF|F 1.8-20040901-000000
まぁ、ぜんぶの問題が自動的にうまくテストできるわけではないのでそれほど完全ではない。
autobuild で core があったら自動的に backtrace をとるようにしてみる。
しかし、1.8 の SEGV は直ってしまったので、しばらくはこれが役に立つ気はしない。
webapp の command line interface をすこしいじる。
しばらく前から webapp は CGI でも FastCGI でも mod_ruby でも webrick でもないときには、普通のコマンドっぽく動作する。 そのインターフェースにオプションを加えて少し制御できるようにした。
% ./xxx.cgi -h xxx.cgi [options] [/path_info] [?query_string] -h, --help show this message -o, --output=FILE set output file --cern-meta output header as CERN httpd metafile --server-name=STRING set server name --server-port=INTEGER set server port number --script-name=STRING set script name --remote-addr=STRING set remote IP address
CERN httpd metafile によるヘッダの出力をサポートしたので、 出力結果を (ヘッダも含めて) ファイル経由で Apache で提供させることが出来るが、 mod_cern_meta は普通は使えない気がする。
asis は If-Modified-Since が効かなくなるので嫌いだし。
.htaccess を書き換えてヘッダを設定するオプションを加えると幸せになれることが多いのかも知れない。
% google-count mod_cern_meta mod_header mod_mime 23000 mod_cern_meta 1240 mod_header 63400 mod_mime
webapp で (ブラウザが受けつけて、かつ、サイズが減るなら) gzip するようにする。
gzip することをユーザに指定させるかどうかはすこし悩んだのだが、 Accept-Encoding に gzip と書いてありながら gzip しないほうがいいケースというのはまずなかろうということで、 なにも指定しなくても gzip することにした。
いつか困ることがあったら圧縮しないことを指定できるようにしよう。
autobuild に結果を upload するための機構をつける。 といっても、終了時に指定したシェルスクリプトを実行するだけだけれど。
問題は実行するシェルスクリプトの中身なのだが、 とりあえず rsync server を調べてやってみた。
とりあえず動かしてみる。
http://www.rubyist.net/~akr/ab/netbsd-2.0/ruby-trunk/latest.html
http://www.rubyist.net/~akr/ab/netbsd-2.0/ruby-1.8/latest.html
しかし、またも「複数あり得るものをひとつしかないと仮定して設計していた」ことに気がつく。
ついでにいえば、なぜかこの環境は drb での EADDRINUSE が頻発する。
どーすっかな。
[latest]