ruby-trunk-changes r34250 - r34265

今日は finalizer で例外発生時の不具合修正、Tempfile の修正、readline の不具合修正などがありました。また ruby_mimmalloc() という malloc() のかわりに使える API が追加されています、

nagachika:r34250 2012-01-10 00:35:06 +0900

finalizer の実行中の例外の発生は rb_protect() で捕捉して無視しているのですが、rb_thread_t::errinfo のクリアがされていなかったため例外が外に漏れてしまい Kernel#load などから抜ける時に例外が再発生してしまうのを修正しています。 [ruby-dev:45113] [Bug #5850]

svn:r34251 2012-01-10 00:35:11 +0900

version.h の日付更新。

nagachika:r34252 2012-01-10 00:46:25 +0900

Tempfile#close した時に IO#close で例外が発生すると finalizer のためのデータのクリアがされず finalizer で再度 close しようとして例外が発生するのを修正しています。また Tempfile#unlink で同じく finalizer のためのデータクリアする時の配列の添字の typo を修正しています。 [ruby-dev:45113] [Bug #5850]

nagachika:r34253 2012-01-10 02:25:53 +0900

test_io.rb の open の :autoclose オプションのテストで IO.for_fd を使ったテストをメソッドを分割して、GC でオブジェクトが回収されていることを期待しているので WeakRef を使って回収済みでなかったら skip するようにしています。 また autoclose: true の時は close 済みの fd を持つ IO オブジェクトが残ってしまう可能性があったのでここで(WeakRef 経由で)明示的に close してできるだけ後に影響しないようにしています。 [ruby-dev:45098] [Bug #5850]

nobu:r34254 2012-01-10 10:41:15 +0900

r34238 の readline.c の修正で配列サイズのチェックをメモリ確保失敗のようにチェックしてしまって Readline のタブ補完時に候補が空だと NoMemoryError が発生してしまっていたのを修正。

nobu:r34255 2012-01-10 10:45:09 +0900

r34254 で追加したテストで NoMemoryError が発生しないことをチェックする assert を追加しています。

kazu:r34256 2012-01-10 12:14:52 +0900

r34254 で readline.c の syntax error になっていたのを修正。

naruse:r34257 2012-01-10 12:49:10 +0900

CRuby にはメモリ確保失敗した時に GC したり NoMemoryError の発生をさせたりする ruby_xmalloc() という関数(xmalloc() という関数マクロでも呼べる)がありますが、rb_objspace が利用できないと利用できないためそのような時は malloc(3) を使います。で xmalloc() で確保したメモリは xfree() で解放し、malloc() で確保したメモリは free() で解放しないといけないのですが、rb_objspace が利用できない時も利用できて解放時に xfree() に渡せる ruby_mimmalloc() という関数の定義を追加しています。
ruby_xmalloc() で確保したメモリは先頭に sizeof(size_t) ぶん余分に領域を確保して、そこに確保したサイズを設定して、そのヘッダ部分をずらしたポインタを返しています。「本物」の xmalloc は rb_objspace に確保したメモリサイズを管理していて xfree() でそれを減算しているのですが、mimmalloc() で確保した時にはそこの加算は行なわれないのでこのヘッダにサイズを格納しないほうがいいような気がします。あーでもその処理は CALC_EXACT_MALLOC_SIZE が真に定義されている時(デフォルトは 0 なので普段は off)だけですね。

naruse:r34258 2012-01-10 12:50:23 +0900

r34239 で posix_memalign() のために #define _XOPEN_SOURCE 600 してたのはやっぱり不要だったらしいです。

naruse:r34259 2012-01-10 15:14:42 +0900

readline.c で NoMemoryError の発生のために rb_raise() を使ってましたが rb_memerror() を使うように統一しています。

naruse:r34260 2012-01-10 15:43:13 +0900

r34162 で clang の最適化避けのために追加したコードの警告避けだそうです。

nobu:r34261 2012-01-10 15:52:24 +0900

gc.c の HEAP_OBJ_LIMIT の計算部分の警告除去のためキャストの除去など。

nobu:r34262 2012-01-10 16:13:04 +0900

test/ruby/test_enumerator.rb のテストメソッドのメソッド名 typo 修正。

shirosaki:r34265 2012-01-10 22:21:54 +0900

ext/dbm/dbm.c の mswin32 版でのコンパイルのために extern は RUBY_EXTERN を利用するようにしています。 [ruby-core:41996] [Bug #5869]