ruby-trunk-changes r45653 - r45665

今日は realloc() 時の GC 実行タイミングについての変更がありました。実は core でも realloc() で GC が走らないことを期待しているコードがあるそうで、ちょっと意外でした。また IO#statfs の追加と struct statfs をラップする File::Statfs というクラスが導入されています。

nobu: r45653 2014-04-22 06:53:48 +0900

xrealloc() でメモリ確保時に GC.stress が設定されていたら GC 実行するようにしています。 へー realloc のときは GC.stress による強制 GC は実行されてなかったんですね。 [ruby-core:62103] [Feature #9761] が、これは意外に影響が懸念されているようでささださんが [ruby-dev:48117] で revert か変更の再修正を提言しています。 GC.stress による GC が行われるだけでなくて、malloc_increase による圧力で GC 実行も xrealloc() で起きるようになり、実は xrealloc() では GC が発生しないという前提で書かれてしまっている部分があってそこでマーク漏れが発生してしまうんだそうです。えーそうだったのか…。

svn: r45654 2014-04-22 06:53:56 +0900

version.h の日付更新。

nobu: r45655 2014-04-22 06:54:17 +0900

GC.stress のビットフラグに 0x04 を追加して malloc/calloc/realloc 後に full mark するという設定を増やしています。 ただなんというかこのフラグの意図がよくわからなかったです… [ruby-core:62103] [Feature #9761]

ko1: r45656 2014-04-22 08:37:18 +0900

r45653 の修正で xrealloc() の後の GCGC.stress によるものだけ起動するようにして、malloc_increase の圧力によるものはこれまでどおり malloc()/calloc() の後だけ実行するようにしています。 ただ GC.stress 時に 2回 garbage_collect_with_gvl() が呼ばれる可能性があるのがちょっと気になります。 [ruby-dev:48117]

naruse: r45657 2014-04-22 10:07:29 +0900

.travis.yml のテスト対象のブランチに ruby_2_0_0、ruby_2_1、ruby_2_2 を追加しています。あれ、ruby_2_2 なんてあったっけ、と思ったけどやっぱりまだなかったです。

naruse: r45658 2014-04-22 10:38:13 +0900

.travis.yml で make test-all の TESTS 変数で渡すオプションに -q と -j2 を追加しています。

nobu: r45659 2014-04-22 11:27:17 +0900

hole(データがない領域)をもつファイルの File#seek の SEEK_DATA (hole をスキップしてデータのある部分だけで seek する)と SEEK_HOLE (hole の位置を基準に探す)を使った場合のテストケースを追加しています。

akr: r45660 2014-04-22 18:52:06 +0900

NEWS ファイルに r45634 などで変更された rb_big_new() や rb_num2long(), rb_num2ulong() などの関数の型の変更について非互換リストに追加しています。

naruse: r45661 2014-04-22 19:35:57 +0900

fstatfs(2) を呼び出す IO#statfs メソッドが追加され、結果の struct statfs をラップする File::Statfs というクラスも導入されています。

naruse: r45662 2014-04-22 19:37:01 +0900

r45659 で追加した hole のあるファイルの File#seek のテストケースで、ファイルシステムによっては SEEK_DATA が使えないことがあるようでエラーメッセージに利用したファイルシステムの種類を含めるようにしています。

naruse: r45663 2014-04-22 19:59:38 +0900

r45661 の File::Statfs での関数名 typo 修正。

naruse: r45664 2014-04-22 20:46:24 +0900

r45662 の File#seek で SEEK_DATA を使うときのテストのメッセージへのファイルシステム追加ですが File#read のところに入れてしまっていたので File#seek で例外が発生しないことをチェックしてそこのメッセージに埋め込むように再修正しています。

kazu: r45665 2014-04-22 21:32:01 +0900

r45650 の ChangeLogtypo 修正。