ruby-trunk-changes r36349 - r36355

今日は zlib の streaming inflate API というのが入りかけたのですが一旦 revert されました。あと rb_thread_blocking_region() が rb_thread_call_without_gvl() に置き換えるリファクタリングがされています。

drbrain:r36349 2012-07-10 09:04:47 +0900

拡張ライブラリ zlib の Zlib::Inflate#inflate にブロックを渡して少しずつ展開したデータを読み出す処理ができるようにしています。 [ruby-core:45724] [Feature #6612]
が GVL 解放した状態から再度 GVL を獲得してブロックを呼び出す処理に入るところが考慮されていなかったので後程 revert されています。

usa:r36350 2012-07-10 10:45:22 +0900

configure にも --enable-win95/--disable-win95 オプションが存在していたので昨日の r36342 に追随して削除しています。

usa:r36351 2012-07-10 10:49:43 +0900

Windows 向けの不要になったマクロ (NT, NtInitialize) を削除しています。

nobu:r36352 2012-07-10 12:00:08 +0900

sample/test.rb でテストケース毎に改行を出力するようにしています。

nobu:r36353 2012-07-10 12:35:03 +0900

sample/test.rb でテストケース毎に \, |, /, - などでぐるぐる回転するプログレス表示や色着けを instance_eval でごにょごにょやっていたのを Rotator というモジュールを定義してメソッドに分けてというふうにリファクタリングしています。

drbrain:r36354 2012-07-10 12:51:25 +0900

r36349 の streaming 版 Zlib::Inflate#inflate を revert しています。ブロック呼び出し時に GVL 再獲得していなかったようです。

nobu:r36355 2012-07-10 22:57:11 +0900

rb_thread_blocking_region() という API は戻り値が VALUE なのですが、この関数は GVL を解放してその間に blocking な処理をするものなので、通常 Ruby のコードを実行することができないため VALUE 型のオブジェクトを返すことはなく、実際に使っているところでも別の型を VALUE にキャストしてやりとりしていて無意味であったので、rb_thread_call_without_gvl() という API を公開して、拡張ライブラリ等でこちらを利用するようにリファクタリングしています。また thread 関係の定義をまとめる include/ruby/thread.h というヘッダファイルを追加しています。拡張ライブラリを書いている人はこのヘッダの有無をチェックする必要があるのですね。ruby.h か intern.h から include してしまってもいいのではないかと思いますが。 [ruby-core:34888] [Feature #4328] [ruby-core:40648] [Feature #5543]