ruby-trunk-changes r39258 - r39283

今日は socket のリファクタリング、io/console の 1.8/1.9 など昔のバージョンへの対応、TracePoint#binding の不具合修正などがありました。

usa:r39258 2013-02-16 04:23:50 +0900

拡張ライブラリ socket の extconf.rb で構造体 struct msghdr のメンバ msg_control をチェックするのを mswin, mingw など Windows 版ではスキップしています。 win32/win32.c での sendmsg のエミュレーションが充分でないためとのこと。 socket のこれを使う部分を動かすことができないということでしょうか。

akr:r39259 2013-02-16 07:08:25 +0900

r39254 で導入した拡張ライブラリ socket の INIT_SOCKADDR_IN() マクロですが第2引数の family は常に AF_INET なので引数を削っています。

akr:r39260 2013-02-16 07:19:05 +0900

拡張ライブラリ socket で UNIX ドメインソケットのアドレス構造体の初期化を行う INIT_SOCKADDR_UN() を導入。 このため extconf.rb で struct sockaddr_un の存在と構造体メンバ sun_len のチェックを追加しています。 この時先日チェックする順番をヘッダ、型、構造体メンバ、関数とそろえていたもののうち一部の構造体メンバのチェックを前に動かしているのですがこれは類似のメンバのチェックを近くしようとしただけなんでしょうか。

akr:r39261 2013-02-16 07:53:59 +0900

ext/socket/rubysocket.h の #ifdef などの directive のインデントをつけるようにしています。

akr:r39262 2013-02-16 07:59:40 +0900

IRIX でのビルドエラーの対応。 xti.h というヘッダのチェックを configure でなく socket の extconf.rb で実施するようにしています。かなり昔に投稿されたパッチですね。 [ruby-core:14447]

akr:r39263 2013-02-16 08:46:44 +0900

r39262 と似たような変更で、NextStep と OpenStep, Rhapsody でのビルドのために netinet/in_systm.h というヘッダも configure でチェックせず socket の extconf.rb でチェックするようにしています。 これもまたずいぶん古い ruby-core の投稿が参照されていますね。 [ruby-core:1596]

akr:r39264 2013-02-16 09:25:54 +0900

拡張ライブラリ socket の extconf.rb での have_header でのチェック順を ext/socket/rubysocket.h での #include 順にそろえるようにしているそうです。すごいこだわりを感じますね。

akr:r39265 2013-02-16 09:59:24 +0900

拡張ライブラリ socket の extconf.rb でチェックしていた sys/feature_tests.h というヘッダですが、既に #include されていなくてチェック結果も利用していないので削除しています。 ちなみに r7901 で入れられたとのこと。

tenderlove:r39266 2013-02-16 12:16:05 +0900

DTrace の probe にシンボルを登録する時に呼ばれるものを追加しています。 Symbol は GC されないということで最近話題に登ることが多いのでそのためでしょうか。

nobu:r39267 2013-02-16 12:45:53 +0900

configure に --libdir を指定すると RbConfig::CONFIG の bindir, libdir, rubyprefix が正しく格納されないという不具合の修正です。 気力が足りず詳しく中身をみていませんが、RbConfig を作るために変数参照に戻す置換を追加したということでしょうか。 [ruby-core:52296] [Bug #7860]

nobu:r39268 2013-02-16 12:46:34 +0900

拡張ライブラリ io/console に 1.9 で未定義のマクロや関数の利用している部分を、自前で定義したり代替の関数の利用に置き換える条件コンパイルを行なったりしています。 io/console は gem パッケージとしてもリリースされているため、1.9 でも動くようにしておく必要があるため trunk 上のソースでもこのような対処が必要です。 [ruby-core:52220] [Bug #7847]

nobu:r39269 2013-02-16 12:47:21 +0900

更に拡張ライブラリ io/console で 1.8 でも動くように対処を追加しているようです。もっとも --io-console-force-compatible-with-1.8 というオプションつきで extconf.rb を実行した時だけみたいですけど。

nobu:r39270 2013-02-16 12:58:04 +0900

r39269 での io/console の extconf.rb の修正で macro_defined? に渡す引数の間違いを修正しています。

nobu:r39271 2013-02-16 13:00:33 +0900

r39268 での io/console の rb_scan_args() の利用の有無は extconf.rb への --{enable, disable}-io-console-rb_scan_args-optional-hash というオプションで切り替えできるようにして、デフォルトは enable にしています。 1.9 対応ということにしたけど、関数名は変わらなくて渡す文字列の受け付ける修飾子が追加されているだけでチェックしにくいからじゃないかと思います。

nobu:r39272 2013-02-16 13:13:07 +0900

拡張ライブラリ io/console に修正を加えたので、gem パッケージもリリースするためバージョンを 0.4.2 にアップデートしています。 また gemspec で ruby の 1.9.3 以降を要求するようにしています。 [ruby-core:52220] [Bug #7847]

nobu:r39273 2013-02-16 13:40:17 +0900

r39267 で追加した configure での変数名の置換ですが exec_prefix の置換の正規表現の間違いを修正しています。 [ruby-core:52296] [Bug #7860]

nobu:r39274 2013-02-16 14:46:06 +0900

.gdbinit で rp などオブジェクトの情報をダンプするコマンドで端末に色つけを行うようにしています。

ko1:r39275 2013-02-16 15:51:17 +0900

r39067 で TracePoint#binding で Binding オブジェクトを生成する時に IFUNC フレームの取扱いを修正した時に、C で実装されたメソッドの時に返す Binding オブジェクトのフレームが変化してしまっていたので再修正しています。 [ruby-dev:46960] [Bug #7774]

ko1:r39276 2013-02-16 16:41:55 +0900

スタックフレームの GC mark 漏れによる SEGV を修正しています。 define_method で定義されたメソッドのなかでそのメソッド自体を再定義した時などにその実行中の Proc オブジェクトが解放されてしまっていたようです。すごいなー。 [ruby-dev:46970] [Bug #7825]

ayumin:r39277 2013-02-16 20:14:23 +0900

Thread.handle_interrupt のテストでメソッド名を typo というか重複して書いていたのを修正しています。 例外が発生することを確認するテストだったので NoMethodError に気がつけなかったみたいです。 うーん投げる例外を固有のものにしたほうがよさそうですね。

akr:r39278 2013-02-16 20:44:42 +0900

拡張ライブラリ socket で recvmsg(2) および recvfrom(2) で戻ってきたアドレス長が渡したものより長かった場合に、渡したサイズに上書きするようにしています。これって「本来ならこのサイズが必要」というサイズが返ってきているってことなんでしょうか。

knu:r39281 2013-02-16 20:52:12 +0900

configure の --with-opt-dir オプションを指定した時に LIBRUBY_DLDFLAGS に反映されていなかったのを修正しています。
[追記]チケットに詳しい解説がありました。
[ruby-dev:47000] [ruby-trunk - Bug #7101] [/追記]

ktsj:r39282 2013-02-16 20:58:33 +0900

vm.c で VM スタックに env ポインタが含まれるかチェックするマクロ ENV_IN_HEAP_P() の最も底のところが判定から漏れていたのを修正しています。

ktsj:r39283 2013-02-16 21:11:37 +0900

.gdbinit の iseq コマンドで r24407 での変更に追随して変数名を改名しています。