ruby-trunk-changes r33126 - r33147

Float#round のオーバフロー不具合修正、autoload を thread safe にする修正の復活、rb_thread_select() の変更の再修正などがありました。

今日で ruby trunk changes を始めてちょうど 1年になります。いやー我ながらよく続きましたね。某所でとりあえず1年はやってからその先のこと考えると言ってましたが、もうちょっとだけ続くんじゃ。

usa:r33126 2011-08-30 22:28:58 +0900

r33112 で RB_GC_GUARD() を追加しているのを revert しています。RB_GC_GUARD は VALUE 型の変数に利用するはずですが reg_cfp (rb_control_frame_t *)に使われていました。

nagachika:r33127 2011-08-30 22:39:31 +0900

dl のテストで dlwrap に渡したオブジェクトがコールバックで dlunwrap したものと一致する、というテストで dlwrap に直接リテラルを渡しているため(dlwrap は単に VALUE(ポインタ) を Integer で表現したものを返すだけなので保護されないので) GC で回収されてしまう可能性があったので、ローカル変数に格納しておくようにしています。

usa:r33128 2011-08-31 00:04:11 +0900

Windows 版の rb_fd_copy() である rb_w32_fd_copy() を実装しています。 [ruby-core:39195] [Bug #5251]
また rb_fdset_t のメモリを確保する rb_fd_init() が抜けていたので追加しています。

svn:r33129 2011-08-31 00:04:16 +0900

version.h の日付更新。

usa:r33130 2011-08-31 00:07:21 +0900

r33117 のテストの fdset のコピー元のミス修正と、テストで利用するシグナルを SIGINT に変更しています。Windows でも使えるからですね。

usa:r33131 2011-08-31 00:34:54 +0900

r33117 で追加した deprecated な API rb_thread_select() のテストで select のタイムアウトをチェックしているとことで条件を少し緩和しています。Time の粒度の問題?

usa:r33132 2011-08-31 00:49:55 +0900

r33117 で rb_thread_fd_select() に渡す fdset の error と write の順番が入れ替わっていたのを修正しています。oh...

usa:r33133 2011-08-31 00:51:13 +0900

さらに rb_w32_select_with_thread() で select() の返り値へ加算するべきところを上書きしていたのを修正しています。

marcandre:r33140 2011-08-31 13:13:00 +0900

42.0.round(308) が Infinity になってしまうなど、 Float#round が特定の組み合わせで結果がおかしくなってしまう不具合修正です。double を frexp(3) で仮数部と指数部に分解して、指数部からオーバフローしてしまうケースや 0 になる場合を検出するようになっています。詳しい数式がコメントで書かれていますね。 [ruby-core:39093] [Bug #5227]

naruse:r33142 2011-08-31 15:56:16 +0900

json の 1.5.4 をマージ。 quirks_mode オプションのドキュメント(rdoc 用コメント)の追加と、Rational, Complex の拡張する部分をそれぞれ別ファイルに切り出しといった変更だけです。

usa:r33144 2011-08-31 16:29:57 +0900

open のデフォルトの改行コードの変換モードのテストを追加しています。 [Bug # 5164] に対するテストです。Linux では成功していますが Windows では現状は失敗しているはず?

usa:r33145 2011-08-31 16:55:15 +0900

r33128 の ChangeLog のチケット/MLの番号の間違い修正。

nahi:r33146 2011-08-31 17:28:19 +0900

r33078 の autoload を thread safe にする修正が ChangeLog 以外はそのまま同じものが適用されています。 Rails のテストが失敗するということで revert されたものですが、その修正は次のコミットで行なわれています。 [ruby-core:20797] [Bug #921]

nahi:r33147 2011-08-31 17:35:27 +0900

autoload の thread safe 化の追加の修正です。定数のテーブルに初期化中の中途半端な構造体を先に挿入していた状態で GC が走る可能性があった為に mark で メモリ破壊する可能性があったので、初期化後に追加するようにしています。また autoload 中の定数をクラス定義で初期化しようとした時に autoload 中かどうかのチェックが走って、そこで誤判定されていたのを修正しています。しかしここで誤判定されても rb_autoload_load() では続いて rb_autoload_required() や現在のソースファイルが load 中のものと同じじゃないかといったチェックが含まれているので大丈夫のように思えるのですが何が起こっていたのかちょっとわからないです。