ruby-trunk-changes r29413 - r29418

季節の変わり目で体調を崩しやすい時期ですね。喉をやられてしまいました。みなさんもお気をつけて。では今日のコミットです。

nobu:r29413 2010-10-06 09:08:44 +0900

rb_thread_start_timer_thread, rb_thread_stop_timer_thread, rb_thread_reset_timer_thread, rb_threadptr_check_signal といった関数のプロトタイプ宣言を vm_core.h に追加しています。

svn:r29414 2010-10-06 09:08:46 +0900

version.h の日付変更。

nobu:r29415 2010-10-06 11:52:26 +0900

[Bug #3910] で報告された SEGV する不具合の修正です。File オブジェクトが close されずに GC で回収された時、正確にはその後 finalize 処理が走る時に、既に回収されてしまっているかもしれない Mutex オブジェクトを使ってしまって SEGV していました。いずれ Mutex オブジェクトではなく直接 rb_mutex_t を使うようにすべきだ、とコメントされています。finalize 処理で触ってはいけないオブジェクトに触ってしまうという不具合は以前もありましたし、まだ潜んでいるかもしれませんね。
報告からほぼ 1時間で修正、瞬速でした。実はわたしもこれ ruby-dev にメールが流れてからちょっと調べてみてたんですが(ぎ、業務に関わるからですよ。現実逃避してたわけじゃないんだからねっ)原因を特定する頃には既に修正されてました。

akr:r29416 2010-10-06 12:30:49 +0900

URI() が返す http スキームの URI オブジェクトに hostname というメソッドを新設しています。元々 host というメソッドは存在しているのですが、ホスト名の部分にIPv6 のアドレス表現を利用する時に問題になるみたいです。
軽く検索してみると、rfc2732 で IPv6URI に含める時の規格が定められているらしく、それによるとたとえば ::1 という IPv6 のアドレスを使う時には http://[::1]/ のようにアドレスを [ と ] で括らないといけないそうです。
URI#host はこの部分を [ ] 付きで取り出します。それをそのまま TCPSocket 等に渡すとエラーになってしまうので、[ ] を取り除いて取り出すためのメソッドとして hostname を定義しているということのようです。 IPv6 を意識したアプリケーションを書く時には URI の扱いには気をつけないといけませんね。

akr:r29417 2010-10-06 12:31:36 +0900

NEWS ファイルに URI::Generic#hostname と URI::Generic#hostname= の新設メソッドを記述追加。

akr:r29418 2010-10-06 12:32:41 +0900

r29416 の URI の件について報告者の記述を ChangeLog に追加しています。