ruby-trunk-changes r35419 - r35426

今日は dRubySSL 上で使う時の不具合修正がありました。

svn:r35420 2012-04-22 01:21:46 +0900

version.h の日付更新。

akr:r35422 2012-04-22 07:52:23 +0900

最新の OpenSSL を使うと drb/ssl.rb のテストで OpenSSL のエラーが発生するそうなのですが、その時ソケットの accept 後に ssl 接続の確立に失敗してしまうのにソケットを開いたままのため、タイムアウトするまで待ってしまうので、ssl の accept で例外が発生していたら即ソケットを閉じるようにしています。 元々の OpenSSL のエラーはこれとは別件でまだ残っています。また drb/ssl のテストでエラーになった時に子プロセスが残ってしまうという現象もあるようなので引き続き修正されそうです。 [ruby-dev:45541]

naruse:r35423 2012-04-22 10:46:45 +0900

Thread のテスト test_status_and_stop_p で Thread#kill で別の Thread を殺した後のステータスをチェックする内容で Thread の切り替えが起きると失敗してしまうようなテストだったので、assert_equal を呼ぶ前に Thread#status, Thread#stop? を呼んで状態を先に格納しておいてから assert のチェックにかけるようにしています。これでもメソッド呼び出しで割り込みチェックポイントになるのでまだタイミングよく切り替わると d.stop? で期待しない値が返ってくる可能性は残っているような気がします。

akr:r35424 2012-04-22 20:35:03 +0900

drb/ssl のテストでエラー時に子プロセスが残る問題について、子プロセスを waitpid している Thread (Process.detach すると waitpid するだけの Thread が生成されます)を憶えておいて dRuby サービス停止時に子プロセスにシグナルを送信するようにしています。これは知らなかったのですが、Process.detach で作られた Thread には pid という特異メソッドが定義されていて、待っている子プロセスの pid が取得できるんですね。 また spawn する時に配列を渡すことでシェルを介さずに直接rubyプロセスをexecすることで、シグナル受信で確実に殺せるようにしています(シェルを介するとシグナルでシェルだけ死んでしまって孫になる殺したいrubyプロセスまで届かない)。 [ruby-dev:45547]

akr:r35425 2012-04-22 20:37:22 +0900

r35424 の ChageLog エントリに ML の参照を追記しています。

nobu:r35426 2012-04-22 21:22:57 +0900

configure で CPPFLAGS に gcc の -Wall オプション(全ての警告出力させるオプション)を追加していましたが -Wall は warnflags で指定するので削除しています。