ruby-trunk-changes r33225 - r33237

今日は API rb_thread_select() (EventMachine での SEGV)の修正などがありました。

naruse:r33225 2011-09-08 21:17:06 +0900

nkf 2.1.2 からソースを import しています。といってもバージョンとリリース日付の更新だけですね。

ayumin:r33227 2011-09-09 01:24:43 +0900

sample/drb のドキュメントとサンプルコード、および sample/mine.rb の文字コードUTF-8 に変更しています。
懐かしいなーマインスイーパのサンプル。

svn:r33228 2011-09-09 01:24:47 +0900

version.h の日付更新。

ayumin:r33229 2011-09-09 01:26:22 +0900

ChangeLog のエントリの typo 修正。

ayumin:r33230 2011-09-09 02:09:30 +0900

template/yarvarch.ja のエンコーディングUTF-8 に変更しています。
yarvarch.(en|ja) って何だろう……と grep してみると tool/instruction.rb で YARV のドキュメントを生成するために読んでいるようですね。

nobu:r33231 2011-09-09 10:22:06 +0900

rb_thread_select() で error 用の fdset (efds) を初期化すべきところ wfds を初期化していて SEGV する可能性のある不具合を修正。 [ruby-core:39380] [Bug #5299]
rb_thread_select() は deprecated になった API ですが EventMachine が拡張ライブラリで利用していたんですね。

sorah:r33232 2011-09-09 11:08:44 +0900

test/rubygems/test_gem_commands_help_command.rb に require_relative "rubygems_plugin" を追加しています。並列テストで走らせている場合にテストケースが別々のプロセスに分離するから(?)か必要な定数が未定義になるのを防いでいるそうです。 [ruby-core:36168] [Bug #4686]

naruse:r33233 2011-09-09 11:26:28 +0900

TestThread#test_priority で priority の高いほうのカウンタが少なかったらすぐエラーにしていたのを 5回サンプリングして過半数で期待通りの結果になっていれば OK と判定を緩めています。

naruse:r33234 2011-09-09 11:26:31 +0900

Process.spwan にとても長いコマンド文字列を渡した時のテストで NoMemoryError が発生する場合もあるのでそれを捕捉するように assert_raise に渡す引数に追加しています。

naruse:r33235 2011-09-09 15:29:36 +0900

r33234 の NoMemoryError を追加するのは revert して、Process.spawn に長い文字列を渡す前に GC.start を実行して一度 GC を完遂させるようにしています。これは LazySweep になって sweep が部分的に実行されるので長いバッファを確保しているオブジェクトが sweep 中だったりすると NoMemoryError が発生しやすくなっているというようなことがあるんですかねぇ。
[追記]と、いう疑問があったので少し調べたのですが、lazy_sweep を実行するのはオブジェクトのスロットである struct RVALUE を取得しようとして空きがなかった時だけで、ruby_xmalloc() などでメモリ確保の時に失敗したら sweep を完全に実行する garbage_collection() を呼んでいるんですよね。従って GC.start を実行しておくのとだいたい同じことが自動的に行なわれるはずなのですが、はて、なぜこれが効くのでしょうか。[/追記]

shugo:r33237 2011-09-09 16:48:00 +0900

NEWS に Net::IMAP.default_port などの IMAP のデフォルトのポート番号を返すメソッドの追加について追記しています。