ruby-trunk-changes r31047 - r31064

kosaki:r31047 2011-03-07 20:58:12 +0900

Process.maxgroups の最大値は sysconf() で取得するようにしています。

kosaki:r31048 2011-03-07 21:35:45 +0900

Process.groups= で getgrnam() は thread safe でないので getgrnam_r() を利用するように変更しています。

kosaki:r31049 2011-03-07 21:54:27 +0900

そして proc_setgroups() の変数の型など少し整理。

sorah:r31050 2011-03-07 23:03:41 +0900

PStore は thread_safe を省略可能引数で指定した時だけ Mutex を使って排他処理していましたが、それとは別に @transaction というインスタンス変数で重複してトランザクション処理に入ろうとすると thread_safe の指定にかかわらず例外を発生させるようになっていました。@transaction は削除して、常に Mutex による排他は有効にした上で thread_safe が false の時は Mutex#locked? でチェックしてロック済みだと例外、true なら Mutex の排他におまかせという仕組みにしています。またPStoreのthread_safe引数に関するテストを追加しています。 [ruby-dev:43317] [Bug #4474]
PStore.new の第2引数の存在をはじめて知ったのですが、いまいち何のためなのかわからない仕様ですね。この修正後も @lock.locked? でチェックした後に切り替えが発生して別の Thread がロック取得したら結局 Mutex の排他処理まかせになるんじゃないか(例外発生しない)とか考えると、thread_safe を指定する理由はどこにあるんだろうかと。コメントを読むとパフォーマンスの為に云々とあり、Mutex#lock の負荷のことを言っているように思えますが、ファイル入出力と比較してそんなに重いかなぁ。けどそうだとすると常に Mutex を使うのはまずいのかも。
と、思っていたら同じようなことを遠藤さんが [ruby-dev:43333] で投稿されていたり。

akr:r31051 2011-03-08 00:03:18 +0900

ext/openssl/ossl_pkey_rsa.c の関数マクロの引数にかっこをつける修正です。

svn:r31052 2011-03-08 00:03:22 +0900

version.h の日付更新。

naruse:r31053 2011-03-08 01:13:57 +0900

sysconf() および RSTRING_LEN() は long 型を返すので、int の変数に格納する際にキャストを追加しています。

naruse:r31054 2011-03-08 01:17:27 +0900

ENABLE_VM_OBJSPACE が真に定義されていない環境(Windows)では rb_objspace という static 変数に rb_objspace_t が宣言されていて、その初期化に変数を書いてしまっていたので定数マクロに変更。

naruse:r31055 2011-03-08 01:44:36 +0900

sysconf() を wrap する get_sc_ngroups_max() を定義して、sysconf() がない(または _SC_NGROUPS_MAX が定義されていない)環境(Windows が対象の模様) でも groups の上限を返すようにしています。

nobu:r31056 2011-03-08 09:07:19 +0900

configure.in の RUBY_REPLACE_TYPE の type name, default type に複数の値を受け付けるようにしている、そうです。patsubst というのは autoconf が使っている m4 の関数らしいです。調べてみると makefile にも patsubst という関数があって、これとは引数の順番が違うというひどいワナがありました。これでしばらく悩んだ……。ともかくダブルクオートをエスケープしているようです。

nobu:r31057 2011-03-08 09:08:16 +0900

process.c にて、RARRAY_LEN() が long を返すので、受ける変数の定義のほうを int -> long に変更しています。また受ける変数が変更できない部分は int にキャストするだけではなくて RARRAY_LENINT() マクロを利用するようにしています。RARRAY_LENINT() は rb_long2int() を呼んでいて、引数が int の範囲を超えてキャストで値が変化するようだと例外を発生させるようになっています。

nobu:r31058 2011-03-08 09:25:40 +0900

r31048 で getgrnam_r() を利用するようにしましたが、getgrnam_r() が定義されていない環境ではやはり getgrnam() を使うようにしています。

nobu:r31059 2011-03-08 09:33:05 +0900

拡張ライブラリ(ext 以下)の並列 configure、並列ビルドができるようにしています、とコミットログにあるので読んでみましたが、ext/extmk.rb を改造して exts.mk という makefile を生成して、build-ext ターゲットはこれを make -f で実行しているというところまではわかりました。これで ext/ の下のサブディレクトリ毎に独立したターゲットになっているので、make -j2 とかするとサブディレクトリ毎に並列で make が走るということなのかなと思います。ビルドプロセス難しいですね。

kazu:r31060 2011-03-08 10:41:05 +0900

ChangeLogtypo 修正や空白削除です。

nobu:r31061 2011-03-08 12:30:23 +0900

misc/ruby-mode.el の修正です。開きかっこのあとで改行した時に次の行を括弧の次のカラムに自動的にインデントする機能を、式の最初のかっこについてはやめるらしい(コミットログより)。

usa:r31062 2011-03-08 15:59:51 +0900

rubygems のテストでキャッシュディレクトリ(というのが何かというのは置いておいて)には ":" を含まない、という assert があるのですが Windows だと先頭に drive letter が "C:\..." のように付くので当然そのままだと ":" が検出されてしまってひっかかるというのを事前に取り除いています。Windows でテストしてなかったんですねきっと。

usa:r31063 2011-03-08 16:52:19 +0900

MSDN に "Windows XP or earlier limits the total size of environment block to 5,120 chars." と書かれているそうで、長すぎる環境変数の値はセットできないし putenv() すると SEGV するそうなので、ENV#[]= で 5120 byte を越える値はセットできないように制限を加えています。

akr:r31064 2011-03-08 21:45:20 +0900

ext/openssl/ossl_rand.c の関数マクロの引数にかっこをつける修正です。openssl はファイルが多いのでなかなか抜け出ませんね。