天泣記

2004/12/02

#1

Ruby 1.8 も定期的に build するようにしてみる。

「複数あり得るものをひとつしかないと仮定して設計していた」ため、 URL の変更が起きてしまった。

新しい URL と古い URL に重なりがなく、 古い URL でも提供を続けられるのがせめてもの幸いか。

2004/12/03

#1

ここ 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 で何回か落ちている。

#2

Ruby 1.8 を定期的に build するようにしたとたん、 1.8 が core を吐く

うぅむ。

#3

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分から始めて倍々に延ばしていく。

2004/12/04

#1

そーいや、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

2004/12/07

#1

Ruby 1.9 で、IO のバッファリングを stdio 抜きで実装した。 この影響はいろいろとあるのだが、 予想していなかった影響として、 変なタイミングで close しても落ちなくなったということがある。

まぁ、考えてみれば、変なタイミングで close すると FILE 構造体が解放された後に その中身をアクセスするはめになるのが落ちる原因だったので、 FILE 構造体をアクセスしなくなってしまった以上、落ちなくなるのは納得できる。

落ちなくなったかわりになにが起きるかというと、 close した後は file descriptor が -1 になっているので、 それを system call にわたして EBADF になるというのが典型的で、 期待される「落ちない」という仕様を十分に満たしている。

2004/12/10

#1

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 のテーブルを気楽に扱える言語があると面白いと思うのだが...

#2

Python における stdio の状況を調べてみる。

まず、現在最新の Python 2.4 は stdio を使っているようだ。 Python 2.4 Library Reference 2.3.9 File Objects

作者の発言を探してみる。

1995年の発言では捨てる気はなかった模様。

1999年の発言では Python 2.0 では捨てるかもしれないと述べている。

#3

Perl における stdio の状況を調べてみる。 たしか、PerlIO というのが導入されたはずだが...

perlapio - perlの入出力抽象インターフェース

PerlIO は Perl 5.8.0 (2002年) でデフォルトになったらしい。 perl58delta : PerlIO is Now The Default

perlio あたりで探すとリファレンスなどのドキュメントがあまりに多く見つかって、 導入される前の経緯が見つからない。

http://www.perl.com/ の検索で探すと、This Week on p5p に載ったものがいくつか見つかったが、 「なぜ」PerlIO に踏み切ったのか、というあたりの事情はよくわからない。 sfio を試していたような記述はある。

#4

This Week on p5p 2001/05/13 : Safe signals

2004/12/11

#1

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 が欲しくなるのもよくわかる。

#2

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 を使って、読み込み先の文字列とバッファに一度に読み込むというのが可能かも知れません。 行単位の読み込みでは長さがわからないからコピーを避けるのは無理な感じですが。

#3

sigsafe library for safe signal handling.

sigsafe release あたりの作者の blog

うぅむ。やっぱアセンブラで書けばどうにかできるわけか...

#4

gcc に guess-branch-probability という機能があることを知る。

生成コードをランダムに変えるのか...

2004/12/14

#1

将来、落ちる直前の 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 とする。

2004/12/16

#1

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 の表示は自動化したいところだ。

#2

ふと思ったのだが、典型的な場合に対してライブラリを使いやすくる方法として、 最初に他人からリクエストされた要求に対して使いやすくするという方法があるかもしれない。

なにしろ、典型的な場合は典型的であるがゆえに、最初に他人からリクエストされる可能性が高いのだから。

#3

catchsegv というコマンドを知る。

2004/12/17

#1

たまに、今年が平成何年なのか調べなければならないことがある。

最近気がついたのだが、これは定期券を見るとわかる。

2004/12/19

#1

ふと思いついて、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;

2004/12/20

#1

GC が起きたところを同定しなくても、 SEGV が起きたあたりに GC を入れてみる、というのでも済むかも知れない?

いや、unknown node type 0 や called on terminated object でひっかかったときには、そこに GC を入れてもしょうがないか。

#2
% 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 を吐かないから目立たないだけ?

#3

つくりかけのもの

+--- 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

まぁ、ぜんぶの問題が自動的にうまくテストできるわけではないのでそれほど完全ではない。

2004/12/26

#1

autobuild で core があったら自動的に backtrace をとるようにしてみる。

しかし、1.8 の SEGV は直ってしまったので、しばらくはこれが役に立つ気はしない。

2004/12/29

#1

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 を書き換えてヘッダを設定するオプションを加えると幸せになれることが多いのかも知れない。

#2
% google-count mod_cern_meta mod_header mod_mime
23000   mod_cern_meta
1240    mod_header
63400   mod_mime

2004/12/30

#1

webapp で (ブラウザが受けつけて、かつ、サイズが減るなら) gzip するようにする。

gzip することをユーザに指定させるかどうかはすこし悩んだのだが、 Accept-Encoding に gzip と書いてありながら gzip しないほうがいいケースというのはまずなかろうということで、 なにも指定しなくても gzip することにした。

いつか困ることがあったら圧縮しないことを指定できるようにしよう。

2004/12/31

#1

autobuild に結果を upload するための機構をつける。 といっても、終了時に指定したシェルスクリプトを実行するだけだけれど。

問題は実行するシェルスクリプトの中身なのだが、 とりあえず rsync server を調べてやってみた。

#2

とりあえず動かしてみる。

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]


田中哲