ruby-trunk-changes r39841 - r39868

今日はシグナル送信時の同期的受信にする変更の再修正、Solaris での SEGV の修正、%r{} の記法での正規表現内でのエスケープ対象文字の修正などがありました。

nobu:r39841 2013-03-20 22:52:54 +0900

拡張ライブラリのビルド時に DESTDIR の指定つきで make install するとエラーになる不具合の対処。 mkmf.rb で各種インストール先ディレクトリに $(DESTDIR) を追加しています。 [ruby-core:53502] [Bug #8115]

nobu:r39842 2013-03-20 22:53:16 +0900

mkmf.rb の find_library メソッドからのメッセージの作成で文字列のフォーマッティングの引数の数が一致しない不具合を修正しています。 [ruby-core:53568] [Bug #8130]

zzak:r39853 2013-03-21 07:35:38 +0900

拡張ライブラリ date の Date::MONTHNAMES の rdoc コメントの typo を修正しています。 https://github.com/ruby/ruby/issues/261

svn:r39854 2013-03-21 07:35:43 +0900

version.h の日付更新。

nobu:r39855 2013-03-21 13:50:52 +0900

clang 4.2 の拡張 __attribute__( (unused) ) を使った未使用変数の警告除去のための実装を UNINITIALIZED_VAR() に追加しています。 [ruby-core:51742] [Bug #7756]

nobu:r39856 2013-03-21 14:13:59 +0900

String のエンコーディング変換に使う関数 rb_str_conv_enc_opts() で Encoding::Converter オブジェクトの実体の構造体を確保する前にオブジェクトスロットを確保しておいて、構造体確保後にオブジェクト確保する順番だとオブジェクト確保の時に例外が発生すると構造体の部分がメモリリークしてしまうのを避けるようにしています。

nobu:r39857 2013-03-21 14:26:32 +0900

Makefile の $(LIBRUBY_SO) のルールでシンボリックリンクを削除する時に指す先にファイルのない不正なリンクになっていると削除できなくて、リンクをはりなおせなかった不具合を修正しています。

nobu:r39858 2013-03-21 16:48:11 +0900

正規表現リテラルの %r{...} のような表記の時に %{\}} のエスケープがきいていないのを修正しているそうなのですが、どうも手元ではうまく現象を再現できていなくていつどう変化したのかがよく整理できていません。 1.9.3 の挙動に合わせたみたいなのですが、2.0.0 の挙動のほうが好ましいような気もします。うーむ。[追記] これはチケットにはられてた挙動の一覧が間違っていたみたいで、元の 1.9.2 および現状の trunk の挙動でよさそうでした。[/追記] [ruby-core:53578] [Bug #8133]

ngoto:r39860 2013-03-21 22:50:20 +0900

Intel Solaris で SolarisStudio 12.3 でビルドした時に Marshal.dump でコンパイラの最適化避けがうまく働かないらしく GC のマーク漏れによる解放で SEGV する現象がおきるようで、変数の宣言に volatile をつけることで回避しています。r38174 で変数の volatile を消して RB_GC_GUARD() を使うように変更したものの volatile を消してたのを再度つけているようです。ということは他にも消した変数もつけておかないと潜在的な問題があるんじゃないかって気もします。根本的には SolarisStudio で RB_GC_GUARD() が効くようになればいいんですけど。 [ruby-core:52042] [Bug #7805]

nobu:r39861 2013-03-21 23:14:19 +0900

r39855 で vm_core.h に UNINITIALIZED_VAR() に clang 4.2 の拡張を使うようにしましたが、include/ruby/ruby.h に RB_UNUSED_VAR() というほぼ同じマクロがあるので、こちらに r39855 の変更を反映させて UNINITIALIZED_VAR() は RB_UNUSED_VAR() を呼び出すだけにしています。 が、これは後ほど revert されています。

nobu:r39862 2013-03-21 23:17:10 +0900

r39819 でメインスレッドで Process.kill で自分自身にシグナル送信した時は受信を待つようにしたのですが、Process.kill の第1引数のシグナルに 0 を指定すると、pid が有効かどうかのチェックだけ行なって実際にシグナルを送信しないのに受信を待ってしまいデッドロックしていたので signal に 0 が指定されたら待たないようにしています。 [ruby-dev:47182] [Bug #8137]

nobu:r39863 2013-03-21 23:17:46 +0900

thread_win32.c の native_sleep の変数宣言の警告除去のため volatile をつけています。この関数内で GVL 解放のため setjmp(3) を呼ぶので、"clobbered by 'setjmp' or 'vfork'" という警告の除去だろうと思います。

nobu:r39864 2013-03-21 23:32:17 +0900

r39861 での vm_core.h の UNINITIALIZED_VAR() から RB_UNUSED_VAR() を使うようにしたのを revert しています。 RB_UNUSED_VAR() は拡張ライブラリで配列の変数に対して利用されているからということですが __attribute__( (unused) ) は配列変数には使えないからでしょうか。
[追記] __attribute__( (unused) ) は大丈夫で、x = x による回避のほうがエラーになったんだそうです[/追記]

naruse:r39865 2013-03-21 23:55:26 +0900

プロセス名を $0 に設定した時のテストで ps でプロセス名を取得するテストで子プロセスの $0 更新の反映を確認するのに 0.1 秒まつだけだったのを10回まで(つまり最大1秒)待つようにしています。

naruse:r39866 2013-03-22 00:04:57 +0900

addr2line.c のバックトレースの情報を出力する処理で1行の内容を fprintf(3) でこまかく出力していたのを、1行単位でまとめて出力するようにしています。

svn:r39867 2013-03-22 00:05:02 +0900

version.h の日付更新。

kazu:r39868 2013-03-22 01:11:32 +0900

process.c と拡張ライブラリ pty の ext/pty/pty.c で型として pid_t を直接利用していたところを rb_pid_t を使うように修正しています。