ruby-trunk-changes r45037 - r45047

今日は主に拡張ライブラリ socket で glibc の不具合を回避するための対応が行われたりしていました。

hsbt: r45037 2014-02-18 23:23:30 +0900

r45034 で Socket のテストで未使用変数の削除のために利用していたメソッド呼び出しまで削除してしまっていたのを戻しています。

naruse: r45042 2014-02-19 11:40:19 +0900

r44920 で memmem(3) が想定した動作をしていないかチェックするようにしてましたが最後に ac_cv_func_memmem を no にするところで参照する変数のまちがいで常に memmem(3) を利用しないようになってしまっていたのを修正しています。

svn: r45043 2014-02-19 11:40:23 +0900

version.h の日付更新。

akr: r45045 2014-02-19 17:51:33 +0900

拡張ライブラリ socket の IPSocket.getaddress で解放した struct addrinfo のメンバを解放後に参照してしまっていたのを修正しています。

akr: r45046 2014-02-19 18:38:24 +0900

拡張ライブラリ socket で struct addrinfo を利用しているところを、拡張ライブラリで定義している struct rb_addrinfo で1段階包んで使うようにリファクタリングしています。この構造体には struct addrinfo へのポインタの他に allocated_by_malloc というフィールドがあるのですが、今回の変更のなかで特にこれを使ってる様子はないので単に包んでいるだけっぽいです。なぜだろう……と思ったら allocated_by_malloc は次の r45047 で追加されていて、確保する方法が異なるため解放方法も変更するために利用しようとしているようです。

akr: r45047 2014-02-19 19:37:43 +0900

glibc の getaddrinfo() の実装に不具合があるらしく、CentOS 6.2 で拡張ライブラリ socket の Socket.pack_sockaddr_in で処理が返ってこなくなってしまうことがあるのを回避するため、渡されているアドレスが既に名前解決済みだったら getaddrinfo() を呼ばないようにする workaround を行っています。 [ruby-core:60801] [Bug #9525]