ruby-trunk-changes r30514 - r30526

今日は不具合修正が多めです。

nobu:r30514 2011-01-12 08:37:15 +0900

Hash のキーと値をいれかえたものの Hash#hash の値が常に同じになっていたのを修正。 [ruby-core:34334] #4262
ちなみに test_hash.rb でキーと値をいれかえて hash が違うというテストを追加していますが、これってたまたま一致するのはありえるんですよね。こういうのはテストが難しい。いくつかやって全部一致してたら NG とかやれば比較的良いんでしょうか。

svn:r30515 2011-01-12 08:37:17 +0900

version.h の日付更新。

naruse:r30516 2011-01-12 09:37:12 +0900

WEBrick::HTTPServer.new などのオプションの :RequestHandler は deprecated になっているのでテストコードでかわりに :RequestCallback を使用するようにしています。また :RequestHandler を指定した時に ":RequestHandler is deprecated, please use :RequestCallback" とメッセージがログに残ることをチェックするテストを追加しています。

naruse:r30517 2011-01-12 11:35:07 +0900

addr2line.c を OpenBSD で利用できるように elf_abi.h を include するように分岐を追加しています。[ruby-core:34384]

usa:r30518 2011-01-12 15:54:09 +0900

README.EXT.ja の rb_ensure() の prototype の typo 修正。

yugui:r30519 2011-01-12 16:26:15 +0900

拡張ライブラリ readline の extconf.rb で RL_PROMPT_START_IGNORE/RL_PROMPT_END_IGNORE というマクロの定義をチェックして、これらが定義されている時だけ USE_INSER_IGNORE_ESCAPE を有効にするようにしています。[ruby-core:34331] [Bug #4261]

yugui:r30520 2011-01-12 16:26:18 +0900

Net::HTTP#connect の https(SSL 接続)の時のソケット接続のタイムアウト設定やエラー時のソケット close する後処理の追加など。またそのテスト。[ruby-core:34203] [Bug #4246]
このテストコードが今回変更した箇所のタイムアウトを検出しているのか SSL の知識が足りなくてよくわかりません。

akr:r30521 2011-01-12 19:27:48 +0900

Enumerable#sort_by は内部で一時利用するための Array オブジェクトを生成しているのですが、そこから Ruby のブロックを yield するために任意の Ruby コードが書けて、そこで callcc を利用すると不正な状態の配列が見える(正確には配列のヒープ上のバッファを参照しているが、それは続行前に解放されてしまう)継続ができることがあるようです。それを防ぐために Enumerable#sort_by には再入をエラーにするチェックがあったのですが、チェック前に触ってはいけない配列のメモリ領域を触っていたのでチェックをより厳密にしています。[ruby-dev:43003] [Bug #4260]

akr:r30522 2011-01-12 19:35:36 +0900

カレントスレッドが thread_free() で解放される時(終了時)に、ruby_current_thread を NULL にリセットして、終了時に RUBY_VM_SET_FINALIZER_INTERRUPT で解放済みのスレッド構造体へのフラグ操作をしないようにしています。[ruby-dev:43000]

akr:r30523 2011-01-12 19:36:08 +0900

Time#strftime の rdoc に追記しています。Time#strftime は 1.9 では libc の strftime() を使わなくなったためにロケールの指定の影響を受けないと追記されています。

akr:r30524 2011-01-12 19:37:32 +0900

vm_dump.c の関数マクロの引数にかっこをつける修正です。

kosaki:r30525 2011-01-12 23:11:06 +0900

Kernel#syscall の 64bit Linux のサポート。64bit 環境の対応は先日 30499 で入れられていましたが、64bit Linux では syscall() の引数と返り値が manual には int と記載されているけど実際は long なんだとのこと。これはひどい

kosaki:r30526 2011-01-12 23:16:01 +0900

syscall() の返り値は unsigned やポインタを int or long にキャストしたものであることがあるので、エラーチェックは -1 かどうかでみるようにしているとのこと。[ruby-core:34062]