ruby-trunk-changes r32286 - r32333

今日もたくさん変更がありました。チケットの修正の他タイマースレッドの不具合修正などがありました。

keiju:r32286 2011-06-29 22:51:30 +0900

irb の help コマンドが動作していなくなっていたのを修正。 RDoc のバージョンアップで利用していたメソッドがなくなっていたので代替を利用するようにしたようです。 [ruby-core:31927] [Bug #3760]

eban:r32287 2011-06-29 23:11:19 +0900

mingw で拡張ライブラリ tk をビルドするために ext/tk/extconf.rb を修正。不要なコンパイルオプションを削るようにしています。

eban:r32288 2011-06-29 23:22:02 +0900

Windows 環境で ext/openssl/ossl.h に #define OPENSSL_SYS_WIN32 1 を追加しています。 mingw(msys) でのビルド用とのこと。

eban:r32292 2011-06-29 23:40:44 +0900

r32292 で追加した OPENSSL_SYS_WIN32 の #define は未定義の時だけにしています。

tadf:r32294 2011-06-29 23:47:04 +0900

拡張ライブラリ date のリファクタリング。 tmx_m_timev() という関数を利用していたところを tmx_m_secs()、tmx_m_msecs() という関数を新設して利用するようにしています。

keiju:r32295 2011-06-30 00:08:41 +0900

irb で文字列リテラル(シングルクオート、ダブルクオート記号で表記したもの)についてタブでメソッドを補完すると、最後に余分なクオート記号がついてしまっていたのを修正。 [ruby-core:22018] [Bug #1145]

svn:r32296 2011-06-30 00:08:44 +0900

version.h の日付更新。

keiju:r32297 2011-06-30 00:31:37 +0900

CMath のメソッドで TypeError を発生させるべきところが ArgumentError になっていたのを修正。 Object#handle_no_method_error というメソッドを追加して Object に real? メソッドを追加するのをやめています。 [ruby-dev:40961] [Bug #3137]

kosaki:r32298 2011-06-30 00:47:24 +0900

Thread.run の rdoc のサンプルコードの間違いを修正しています。別の Thread が stop したのを確実に待つようなコードになっていないためデッドロックのおそれのあるコードになってました。 [ruby-core:31454] [Bug #3606]

kosaki:r32299 2011-06-30 00:51:54 +0900

これも同じく Thread#wakeup の rdoc でデッドロックの恐れのあるサンプルコードを修正しています。 [ruby-core:31454] [Bug #3606]

kosaki:r32300 2011-06-30 00:55:44 +0900

これも Thread#stop の rdoc のサンプルコードでデッドロックのおそれのあるコードを修正しています。 [ruby-core:31454] [Bug #3606]

kosaki:r32301 2011-06-30 01:34:51 +0900

Thread.pass の rdoc のサンプルコードの記述を削除しています。 Thread.pass で完全にスレッドの実行順序が制御できるかのように書かれていましたが、Thread.pass は切り替えを指示するだけで、実行順序は保証されないのでその旨だけ記述しています。

kosaki:r32302 2011-06-30 02:36:00 +0900

スレッドのスケジューリングまわりのリファクタリングです。 rb_thread_schedule_rec() は再帰的に呼ばないようにして rb_thread_schedule_limits() に改名して sched_depth 引数を削除。 interrupt_flag のチェックをこの上の rb_thread_schedule() に移動しています。また rb_threadptr_execute_interrupts_rec() も rb_threadptr_execute_interrupts_common() に改名して再帰的な呼び出しをやめています。

kosaki:r32303 2011-06-30 02:43:58 +0900

rb_thread_schedule_limits() でスレッドの連続して動作している時間が短くて(100msec 以下) gvl_yield() で別のスレッドに GVL をあけわたす時だけレジスタの内容を rb_thread_t に保存する処理をするようにしています。

kosaki:r32304 2011-06-30 02:55:03 +0900

rb_threadptr_execute_interrupts_common() の先頭にて signal を受信しているのにタイマースレッドからの配信がまだ来ていない時に配信されるまで待つという動作を削除しています。
これは [Bug #968] でシグナルが喪失しやすいということで入ってたのですがもう不要になってたんでしょうか。……と思ったのですが、これを消す前から別の種類のシグナルの取りこぼしが起きるようになっているようですね。ううむ。

drbrain:r32305 2011-06-30 06:17:31 +0900

RDoc 3.8 をマージしています。 trunk のドキュメント整形の不具合修正をしているらしいです。標準添付の拡張ライブラリのクラス/モジュールがいくつか特別扱いになってるようです。

drbrain:r32306 2011-06-30 06:23:36 +0900

Thread.pass の rdoc の添削。

naruse:r32307 2011-06-30 06:25:03 +0900

CMath.log の第2引数は nil を許容するようにしています。

drbrain:r32308 2011-06-30 06:33:36 +0900

lib/drb/drb.rb の rdoc 制御用のコメント追加です。

nobu:r32309 2011-06-30 06:37:45 +0900

ChangeLog の行末の空白文字を消しています。

nobu:r32310 2011-06-30 06:37:48 +0900

RUBYLIB 環境変数のロードパスを処理する前に rubylib_mangled_path() を呼んで RUBYLIB_PREFIX を処理するようにしています。 ちょっとチケットの現象との関連がよくわかっていませんが Windows環境変数を取得する時のメモリ管理の問題があるようです。 [ruby-core:23983] [Bug #1679]
なお RUBYLIB_PREFIX は Windows 環境でのロードパスの置換をするためのものだそうで、もう不要になっているのでそのうちこの処理は消されるそうです。

drbrain:r32311 2011-06-30 09:20:15 +0900

ENV のドキュメント(rdoc)を追加しています。

drbrain:r32312 2011-06-30 09:22:32 +0900

lib/cmath.rb で追加された handle_no_method_error に rdoc 用の :nodoc: タグをつけています。
また error.c で EncodingError, fatal などのドキュメントを追加したり、ドキュメントのない例外クラスのドキュメント整形を抑制するようにしています。

drbrain:r32313 2011-06-30 09:30:46 +0900

YAML のドキュメントを追加しています。 YAML のエンジンを Psych と Syck で切り替える方法についての記述など。

drbrain:r32314 2011-06-30 09:37:00 +0900

lib/weakref.rb にドキュメントを追加しています。

nagachika:r32315 2011-06-30 12:13:18 +0900

ChangeLogtypo 修正です。

naruse:r32316 2011-06-30 12:18:12 +0900

r32307 で追加した CMath.acos のテストは浮動小数点数の誤差を考慮するため assert_in_delta を使うように書き直しています。

naruse:r32317 2011-06-30 12:27:08 +0900

もう一度 CMath.acos のテストを修正。実数部と虚数部をそれぞれチェックするのではなくて Complex のまま差を取って abs2 が充分小さいことをチェックするようにしています。

naruse:r32318 2011-06-30 12:31:01 +0900

さらにさらにもう一度、assert_in_delta は引数が Complet の時にそのまま使えるようなので単に回答と一緒に渡すようにしています。

ko1:r32319 2011-06-30 12:34:16 +0900

タイマースレッド用のマシンスタックは最低でも 12KB (3 pages) は確保するようにしています。AMD64 上の FreeBSD 8.2 ではスタックオーバフローが起きてしまうそうです。

ko1:r32322 2011-06-30 17:27:13 +0900

ブロック中のスレッドを Thread#raise などで起こす時にタイマースレッドが切り替えるべきスレッドがいないと誤判定して polling モードをやめて起こされるまで停止するモードに入ってしまう可能性があったのを修正しています。

ko1:r32323 2011-06-30 17:37:06 +0900

拡張ライブラリ objspace で追加される ObjectSpace.count_tdata_objects のドキュメントが count_nodes と同じになっていたので正しいドキュメントを追加。 [ruby-dev:42321] [Bug #3892]
また rb_objspace_data_type_name() の宣言を internal.h に追加して内部で利用できるようにして、ObjectSpace.count_tdata_objects で klass が 0 になっている内部的なオブジェクトはハッシュのキー false のところに集計さえていたのを rb_objspace_data_type_name() を使って TypedData の場合は名前を取得してシンボルにしてキーにするようにしています。

ko1:r32324 2011-06-30 17:38:10 +0900

r32323 の ChangeLog のエントリにチケット参照を追加しています。

ko1:r32325 2011-06-30 19:11:45 +0900

タイマースレッドでの select(2) が errno=514 で返ってきてしまうために [BUG] でアボートしてしまうので不明な errno で返ってきた時には単に無視するようにしています。
これはちょっと憶えがありますね。正確なバージョンは忘れましたがちょっと前の Linux Kernel の不具合で select(2) が内部的に使っていて、外に漏らしてはいけないはずの errno をセットしたまま返ってしまうというのがあったような。その対策です。

tadf:r32326 2011-06-30 20:05:24 +0900

ext/date/date_core.c の Date/DateTime のドキュメントの修正です。

nobu:r32327 2011-06-30 20:12:38 +0900

r32283 の Module#const_get の修正のためのテストを追加しています。 [Bug #3422] [Bug #3423]

nobu:r32328 2011-06-30 20:35:04 +0900

test/ruby/test_rand.rb の Random#bytes のテストのリファクタリング。メソッドを分離したり、やけにたくさん空白のあった行を改行したりしています。

tadf:r32329 2011-06-30 20:38:33 +0900

ext/date/date_core.c の不要なグローバル変数の削除や関数の改名などのリファクタリングです。

nobu:r32330 2011-06-30 20:54:27 +0900

拡張ライブラリ io/console に gemspec ファイルを追加して、gem としてインストールするようにしています。 1.9.2 向けに gem パッケージをリリースするため 1.9.3 以降でも pre-install された gem パッケージという体裁にしているということだと思います。

nobu:r32331 2011-06-30 20:55:54 +0900

先程追加した gemspec ファイルの svn property の変更です。

tadf:r32332 2011-06-30 21:17:52 +0900

ext/date/date_core.c のリファクタリングです。定数を直書きしていたものを定数マクロとして定義して使うようにしています。

kanemoto:r32333 2011-06-30 21:31:53 +0900

AIX でのビルド向けにコンパイラフラグに -qinfo=por というのを追加するように configure.in を修正しています。 [ruby-core:32859] [Bug #3971]