ruby-trunk-changes r38411 - r38415

今日はあまりコミットがなく、Thread+Fiber 内で Thread.exit で停止すると例外になる不具合の修正などがありました。

kazu:r38411 2012-12-16 00:00:00 +0900

r38407 の ChangeLog エントリの typo 修正。

svn:r38412 2012-12-16 00:00:05 +0900

version.h の日付更新。

ngoto:r38413 2012-12-16 00:04:25 +0900

dl からコピーしてきた ext/fiddle/pointer.c の rb_fiddle_ptr2cptr() で引数の型エラー時の例外のメッセージが DL::PtrData のままになっていたので Fiddle::Pointer に修正しています。

nagachika:r38414 2012-12-16 00:46:07 +0900

メインスレッド以外の Thread 内での Fiber 内で Thread.exit すると例外が発生するという現象の対処です。Fiber の終了時に TAG_JUMP で飛んできてないかチェックして不正な制御構文によるジャンプを検出する処理があるのですが、Thread.exit は rb_thread_t::errinfo に INT2FIX(TAG_FATAL) つまり Fixnum の 8 を格納して TAG_FATAL でジャンプしているので、結果 nil を rb_threadptr_async_errinfo_enque() に渡してしまいます。ここでは Thread.exit は例外発生させずに外に伝播させるようにしています。 [ruby-dev:45218] [Bug #5993]
で、似たような問題で Thread.exit ではなくて rb_fatal() で fatal 例外が発生した時に今度はそれが握り潰されてしまうというのがあって、それは [Bug #7570] として報告済みです。

kosaki:r38415 2012-12-16 02:10:50 +0900

r38409 でメモリページサイズを取得するために sysconf(3) を呼んでいたところで明示的なキャストを追加しています。 Mac OS X でのコンパイルエラー修正ということですが手元ではコンパイルできていたような。