ruby-trunk-changes r39815 - r39824

今日は Process.kill でシグナル送出先が自分自身のプロセスだった時の同期的に例外が発生するようにする変更や Mac OS X での Dir.glob と文字エンコーディングについての変更などがありました。

mrkn:r39815 2013-03-19 02:15:43 +0900

configure.in で CXX が外部から設定された時に ac_cv_prog_CXX に設定するようにしています。 r39814 でも関連している Mac OS X でのコンパイラの自動判定による CXX の設定を反映する為ではないかと思います。

naruse:r39816 2013-03-19 02:39:39 +0900

r39808 の darwin 用の backtrace 実装にコメントを追記しています。また不要なキャストを削っています。

sorah:r39817 2013-03-19 10:09:46 +0900

ObjectSpace.each_object の rdoc の typo 修正。 [ruby-dev:47177] [Bug #8116]

kosaki:r39818 2013-03-19 12:17:34 +0900

Linux で _IOC_SIZE() を利用する関数の定義の条件コンパイルLinux であることだけでなくて _IOC_SIZE() 自体が定義されているかどうかも条件に含めています。 musl という libc 実装があるそうで、そいつには _IOC_SIZE() がないそうです。 [ruby-core:53229] [Bug #8051]

kosaki:r39819 2013-03-19 13:40:22 +0900

Process.kill で自分自身にシグナルを送信する時に、その受信は非同期に到達するので、いつ SignalException が発生するかはわからなかったのですが、それを同期的に kill した時に発生させるように、受信するまで待とうとしているようです。rb_thread_cond_t を導入してシグナル受信もしくはその他の割り込みを待つようにしているみたいです。ただしメインスレッドで Process.kill した時だけみたいです。 [ruby-core:52864] [Bug #7951]
r39501 で一度はドキュメントのサンプルに追記してシグナルは非同期に受信するので Process.kill してもすぐ SignalException が発生するとは限らないよという仕様を明示するようにしてたと思うのですが、どういう心境の変化があったんでしょうか。 あとこのあたりから puppet のテストが止まるようになったようなので、おそらくこの変更が絡んでいるんじゃないかなぁという気がします(hsbt さん情報)。

nobu:r39820 2013-03-19 17:04:26 +0900

dir.c の join_path() という関数に第1引数の path の長さを第2引数に受け取るように引数を追加しています。同じ path について繰り返し呼ぶから strlen(3) を何度も呼ばなくてよいようにしているのかも。

nobu:r39821 2013-03-19 17:06:53 +0900

チケットをみると長らく(というか少し前に)議論されている文字エンコーディングについての問題で、Mac OS XUTF-8 のマルチバイト文字を含むファイル名にマッチするように Dir.glob すると結果の文字列がおかしなものを返すという問題の対処のようです。 ファイルシステムが HFS の時にファイル名は UTF-8-MAC というちょっと変わった UTF-8 の亜種になっているので、Dir.glob した時にはこれを UTF-8エンコーディングを変換する処理を挟むようにしているみたいです。 [ruby-core:48745] [Bug #7267]

nobu:r39822 2013-03-19 17:09:33 +0900

string.c の rb_str_conv_enc_opts() というエンコーディング変換の関数で Converter オブジェクトをバッファを拡張して追加で変換する度に再生成していたのを、1度生成したものを使いまわすようにしてパフォーマンス向上を図っています。

usa:r39823 2013-03-19 17:40:39 +0900

test/win32ole/test_err_in_callback.rb に CI でのテストのデバッグ用と思われるメッセージ出力を追加しています。

usa:r39824 2013-03-19 19:51:49 +0900

r39819 で ruby_kill() の導入に伴い mswin 版でビルドに失敗していたのを修正するため pid_t のかわりに rb_pid_t を使うようにしています。