ruby-trunk-changes r35935 - r35955

今日は昨夜 svn サーバがメンテナンス中で更新ツールにデータが落とせなかったぶんもあるのでたくさんになってます。 Windows での API 追加や Process の修正などが主にありました。

usa:r35935 2012-06-06 12:39:40 +0900

process.c で fork(2) が存在しないプラットフォーム(Windows)向けにファイルディスクリプタのリダイレクト用の情報を格納するメモリ領域を確保しておく必要があったので修正しています。

usa:r35936 2012-06-06 13:18:53 +0900

Windows 版で VT100 のエスケープシーケンスを解釈するために導入した構造体の開放処理ですが、fd がソケットでない時だけ実行するようにしています。

usa:r35937 2012-06-06 13:29:38 +0900

Windows 版に新しい API rb_w32_wrap_io_handle()/rb_w32_unwrap_io_handle() を追加しています。コメントによると Windows の I/O ハンドル (HANDLE または SOCKET) をラップして fd を返します。
Windows 版では fd はソケットとそれ以外を区別して扱うためにソケットのリストを保持していて、それに登録する処理が必要なのでこのような処理が必要になるのだと思います。 [ruby-core:37227] [Feature #4906]

usa:r35938 2012-06-06 14:04:50 +0900

r35937 の ChangeLog のチケット番号の typo 修正。

akr:r35943 2012-06-06 20:09:26 +0900

process.c の exec_with_sh() で環境変数の設定も渡して execve(2) で実行できるようにしています。shell 経由でコマンド実行する時も環境変数を変更して実行できるように。

akr:r35944 2012-06-06 20:49:30 +0900

Process.spawn で fork 後に async-signal-safe じゃない関数を呼ばないようにする修正の続きです。 dln_find_exe_r() で実行コマンドを PATH から探す処理を fork 前に実行しておいて引数の構造体にメンバを追加してそこに格納しておくようにしています。

akr:r35945 2012-06-06 20:58:09 +0900

async-signal-safe かどうかのチェックコメントを更新しています。修正してめでたく async-signal-safe になったものに加えて、まだそうなっていない箇所がどの関数のせいで async-signal-safe でないのかも追記されています。 akr さんの async-signal-safe への旅はもうちょっとだけ続きそうです。

akr:r35946 2012-06-06 21:11:45 +0900

IO.popen に渡すコマンドの先頭や末尾に空白があった時にそれを除去して実行できるかを確認するテストを追加しています。

usa:r35947 2012-06-06 21:20:58 +0900

exec_with_sh() の変更と共に引数が追加された関数マクロ try_with_sh() の fork() がない環境(Windows)での宣言が古いままだったので引数を追加しています。

akr:r35948 2012-06-06 21:33:28 +0900

process.c の proc_exec_?? とか proc_spawn_?? といった関数マクロや関数をより説明的な名前に変更しています。

akr:r35949 2012-06-06 21:34:51 +0900

process.c で earg (コマンド実行用の引数の情報をまとめた構造体)が無視されてるというコメントが古くなっていたので削除しています。

akr:r35950 2012-06-06 22:10:54 +0900

async-signal-safe のコメントに間違っていたところがあって修正しています。

ko1:r35951 2012-06-07 15:54:24 +0900

.gdbinit に trace_machine_instructions という機械語をダンプするコマンド定義を追加しています。 https://bugs.ruby-lang.org/projects/ruby-trunk/wiki/MachineInstructionsTraceWithGDB

svn:r35952 2012-06-07 15:54:29 +0900

version.h の日付更新。

akr:r35954 2012-06-07 20:29:43 +0900

r35925 で internal.h に移動した exec/spawn 関連の構造体と関数の宣言を include/ruby/intern.h に戻しています。 intern.h にあるものは非公式ながら一応外から見えるので internal.h に動くと拡張ライブラリなど影響があるかもしれないのでそういうのを気にしてのことでしょうか。構造体の定義もばんばん変わってるので intern.h の中身を使うのはよっぽど玄人でしょうけど。

akr:r35955 2012-06-07 22:13:52 +0900

process.c の rb_fork_err() で fork(2) に EAGAIN などで失敗してリトライするまで少し sleep を挟むときに rb_protect() をかけるかどうかの判定を修正しています。 fork 後のコールバック関数の指定の有無は影響しないようにして status 引数のみで判定するようにしています。理由までは追いきれませんでした。