Hatena::ブログ(Diary)

PB memo このページをアンテナに追加 RSSフィード

2015-03-02 ruby-trunk-changes r49797 - r49811

[][]ruby-trunk-changes r49797 - r49811

今日は io/wait の不具合修正や Solaris 版のビルド/テストの修正などがありました。

normal: r49797 2015-03-02 06:03:22 +0900

拡張ライブラリ io/wait の IO#nread で戻り値で読んだバイト数を返す時に INT2FIX() を使わずに int をそのまま VALUE として返してしまっていた不具合を修正しています。 [ruby-core:68369] [Bug #10923]

svn: r49798 2015-03-02 06:03:34 +0900

version.h の日付更新。

nobu: r49799 2015-03-02 11:43:10 +0900

r49794 と同様 configure.in で定義している RUBY_REPLACE_TYPE() で符号の有無をチェックした時に n に unsigned 修飾子を追加するようにしています。

ngoto: r49800 2015-03-02 12:07:18 +0900

標準添付ライブラリ ftp のテストで利用するサーバ側ソケットに setsockopt で SO_OOBINLINE というオプションをつけて OOB (優先的に送信されるデータ)の受信を明示的に指定するようにしています。 Solaris でのテストの失敗を修正するためだそうです。またこの変更後に受信するパケットのかたまりかたが OS によって異なるようなので Socket#recv で取得していたところを、"\n" までまとめて受け取るように gets を呼ぶように変更しています。多分送信側でパケットの組み立てかたが異なるんですね。 [ruby-dev:48885] [Bug #10915]

nobu: r49801 2015-03-02 13:04:30 +0900

Signal.signame でシグナル番号として不正な番号が渡された時に nil を返すようにしています。これはバックポート必要かなぁと思いましたが、現状は ArgumentError で "NULL pointer given" という例外が発生するので SEGV するわけでもないので要望がなければこのままかなぁという感じですね。

nobu: r49802 2015-03-02 13:35:12 +0900

.travis.yml に configure と make reconfig の結果の config.status が異なったらエラーにするコマンドを、異なっていてもビルドは通すように(差分は表示した上で)変更しています。こんなのやってたっけ、と思って調べてみたら r42611 で入れてました。結構前ですね。

nobu: r49803 2015-03-02 14:44:59 +0900

r49794 や r49799 の続き。 configure.in で定義している RUBY_REPLACE_TYPE() で unsigned が余分につく可能性があったので追加修正しています。

nobu: r49804 2015-03-02 15:36:12 +0900

_longjmp() が利用できない場合は _setjmp() も利用できないものとして判定するのを AC_CHECK_FUNCS(_setjmp) の前にもってきています。 AC_CHECK_FUNCS() のチェックをスキップさせるためでしょうか。

nobu: r49805 2015-03-02 15:44:22 +0900

r49795 の test-all 用ユーティリティの EnvUtil.invoke_ruby の signal キーワード引数引数のシグナル名を Signal.list を使って解決するようにして、対応するシグナルがなかったら SIGKILL を使うようにしています。 また Windows 版のときの対応は Signal.list から "TERM" を除外するようにしています。多分元々ないんでしょうけど。

nobu: r49806 2015-03-02 15:44:34 +0900

同じく EnvUtil.invoke_ruby にタイムアウト時に発生させる例外クラスを指定するキーワード引数 timeout_error を追加して、これに nil を指定することでタイムアウト時にエラーにせずにシグナルで殺して終了ステータスを取得するようにしています。そして EnvUtil.assert_separately でこの機能を使ってタイムアウト時に例外で止めずに終了ステータスを返してそのチェックでエラーにさせるようにしています。

nobu: r49807 2015-03-02 15:50:28 +0900

r44689 で追加した fork 時のシグナル受信でデッドロックするケースのテスト test_deadlock_by_signal_at_forking で assert_separately を使うようになったので不要になっていた IO.popen を使った子プロセス生成をやめています。ぐっと短くなった。

nobu: r49808 2015-03-02 16:20:13 +0900

EnvUtil.invoke_ruby でシグナル送信時の rescue 節の例外クラスの指定の typo 修正。

nobu: r49809 2015-03-02 16:54:30 +0900

r49808 の再修正。 Errno::INVAL じゃなくて Errno::EINVAL

ngoto: r49810 2015-03-03 01:06:08 +0900

r49760 あたりの PRELOADENV 導入の変更で Solaris 版で --enable-shared でのビルドがエラーになっていたので、Solaris で PRELOADENV に LD_PRELOAD_{64,32} を指定するようにしています。 また 32bit 版のための LIBPATHENV の指定も追加しています。 [ruby-dev:48888] [Bug #10926]

svn: r49811 2015-03-03 01:06:20 +0900

version.h の日付更新。

2015-03-01 ruby-trunk-changes r49788 - r49796

[][]ruby-trunk-changes r49788 - r49796

今日は Time.strptime の不具合修正や ObjectSpace._id2ref で内部的オブジェクトを隠すようにする修正などがありました。

akr: r49788 2015-03-01 09:12:48 +0900

標準添付ライブラリ time の Time.strptime で指示子に %s と %N を指定した時に小数点以下の値が無視されていたのを修正しています。 [ruby-core:68301] [Bug #10904]

svn: r49789 2015-03-01 09:13:01 +0900

version.h の日付更新。

akr: r49790 2015-03-01 09:13:11 +0900

r49788 の Time.strptime の修正についてのテストケースを追加しています。 [ruby-core:68301] [Bug #10904]

nobu: r49791 2015-03-01 11:17:13 +0900

tool/mkconfig.rb で rbconfig.rb を作る際に XXX_RUBY_COMMAND や INSTALLDOC、TARGET、DTRACE_XXXX などのビルド時にのみ利用する変数を除外する条件を追加(強化)しています。

nobu: r49792 2015-03-01 11:18:00 +0900

ObjectSpace._id2ref で klass が 0 の内部的なオブジェクトの object_id が渡された時は例外を発生させるようにしています。 ObjectSpace.each_object でスキップさせているので _id2ref でもアクセスできないようにしています。まあ、チケットの再現スクリプトをみる限り狙い撃ちは難しいのですが、struct RVALUE の slot は配列になっているので隙間をみつければもうちょっと予測可能なので塞いでおいたほうがいいですね。 [ruby-core:68348] [Bug #10918]

nobu: r49793 2015-03-01 18:10:36 +0900

r44920 で configure で memmem(3) が空文字列に対して期待した動きをしているか確認するチェックを HAVE_MEMMEM を confdefs.h に追加する前に実行するようにしています。

nobu: r49794 2015-03-01 20:21:18 +0900

configure.in で定義されている RUBY_REPLACE_TYPE という関数で型のサイズを求めるのに rb_cv_XXX_convertible の名前から取得するようにしています。 よくわかりませんが結果が安定するようにとのこと。

nobu: r49795 2015-03-01 20:21:40 +0900

test-all 用のユーティリティ EnvUtil.invoke_ruby で子プロセスを停止させるためのシグナルをキーワード引数 signal で指定できるようにしています。

nobu: r49796 2015-03-01 21:27:06 +0900

timer thread を起こすための pipe などの情報を持つ構造体 timer_thread_pipe で pid を保持するメンバの型を rb_pid_t に変更しています。

2015-02-28 ruby-trunk-changes r49774 - r49782

[][]ruby-trunk-changes r49774 - r49782

今日は RubyGems の 2.4.6 への更新、AIX 向けの pty の修正、Enumerable#each_slice や #each_cons にとても大きな数を渡した時のエラーの修正などがありました。

hsbt: r49774 2015-02-27 22:00:45 +0900

RubyGems を 2.4.6 に更新しています。 https://github.com/rubygems/rubygems/pull/1159 https://github.com/rubygems/rubygems/pull/1171 https://github.com/rubygems/rubygems/pull/1173 などを修正しています。 拡張ライブラリを含む gem のロードパスのサーチ順の修正も入っているはずですね。

odaira: r49776 2015-02-28 08:32:48 +0900

拡張ライブラリ pty で AIX 向けの ioctl(2) の呼び出しの条件コンパイルの条件を追加しています。 [ruby-core:58539] [Bug #9144]

svn: r49777 2015-02-28 08:32:58 +0900

version.h の日付更新。

nobu: r49778 2015-02-28 15:02:06 +0900

無名クラス/モジュール(Module.new で作られて定数に代入されていないもの)の下に追加されたクラス/モジュールの名前を作る時にエンコーディングを保持するようにしています。

nobu: r49779 2015-02-28 15:42:29 +0900

rb_tmp_class_path() でクラス名の文字列をすぐに作らずに Qnil や Qfalse を返して、cache関数で make_temporary_path() という関数を呼んでそこで文字列生成するようにしています。どうせすぐ cache関数を呼ぶのに、と思ったら rb_search_class_path() という関数が新規作成されていて、こいつは cache関数として never_cache() という関数を利用するので実際に文字列を生成せずに Qnil, Qfalse のまま結果を取り出せるようです。まだ使っているところはありませんが。

nobu: r49780 2015-02-28 15:44:22 +0900

r49779 で追加した rb_search_class_path() をさっそく利用して、vm_dump.c の rb_vm_bugreport() でシグナルハンドラ内で無名クラスの名称のためにメモリ確保されるのを抑制して、Qnil や Qfalse がかえってきたらポインタ表示にするようにしています。

nobu: r49781 2015-02-28 17:18:42 +0900

Enumerable#each_slice や Enumerable#each_cons で引数に渡されたサイズが receiver のサイズを越えていたら receiver のサイズまで小さくしたり、結果を作らないようにしています。内部的に無条件で指定されたサイズの配列オブジェクトを作ろうとしてエラーになっていたのを回避しています。 [ruby-core:68335] [Bug #10913]

nobu: r49782 2015-02-28 18:09:18 +0900

r49781 で導入した Enumerable#each_slice や #each_cons のサイズチェックですが、size メソッドで取得したサイズが Fixnum の時だけ比較して、そうでなければ(つまりサイズが Bignum 以上なら)切り詰めはしないようにしています。 NUM2ULONG() で変換できない場合を回避しているのだと思います。まあ実際にはその場合は配列のメモリ確保でエラーになってしまいそうですが。

2015-02-27 ruby-trunk-changes r49762 - r49773

[][]ruby-trunk-changes r49762 - r49773

今日は特殊変数の処理の不具合修正? などがありました。

nobu: r49762 2015-02-26 23:42:11 +0900

r49760 の tool/runruby.rb での LD_PRELOAD や DYLD_INSERT_LIBRARIES 環境変数に複数のパスを指定するときのデリミタが空白になってた(LD_PRELOAD は空白でも OK だったそうですが DYLD_INSERT_LIBRARIES は ":" 区切り)のを File::PATH_SEPARATOR を使うように修正しています。

nobu: r49763 2015-02-26 23:42:24 +0900

test/ruby/test_io.rb で have_nonblock? とか RUBY_PLATFORM のチェックでテストをスキップしているのを、テストメソッド内で return していたところをそもそもテストメソッドを定義しないように分岐をするようにしています。

nobu: r49764 2015-02-26 23:42:26 +0900

io.c で文字列オブジェクトバッファにアクセスするために RSTRING_PTR() や RSTRING_LEN() を GC が走ったりしないのに複数回呼んでいたところをローカル変数に格納して使いまわすようにしています。

nobu: r49765 2015-02-27 12:54:54 +0900

IO.copy_stream でどちらかのオブジェクトが T_FILE 型でなくて fd を持ってない(StringIO など IO を偽装している)場合に read/write メソッドを使う fallback 実装でエラー時にバッファサイズを切り詰める処理が飛ばされていたので常にリセットするようにしています。

nobu: r49766 2015-02-27 12:55:00 +0900

拡張ライブラリ thread のソースにある enum 型の定数で不要なのに値が指定されていたのをやめて、また最後に番兵用の要素を追加するようにしています。

svn: r49767 2015-02-27 12:55:07 +0900

version.h の日付更新。

nobu: r49768 2015-02-27 13:57:51 +0900

IO#ioctl や IO#fcntl で引数バッファとして文字列を渡した時に未使用の領域を 0クリアしておくようにしています。

nobu: r49770 2015-02-27 16:02:04 +0900

compile.c で #if CPDEBUG < 0 という条件下でコンパイルされる APPEND_ELEM() というマクロの定義が ADD_ELEM() になっていたので修正しています。 たぶんデバッグ用にコンパイルした時にだけ問題があったのでしょう。

nobu: r49771 2015-02-27 16:23:23 +0900

今度は compile_debug (これは #define compile_debug CPDEBUG と定義されているので結局 CPDEBUG) が 2以上という条件の時にコンパイルした命令列を disassemble したものを printf しているところで #define printf ruby_debug_printf と利用する関数をすりかえたうえで fflush() の呼び出しを削除しています。

ko1: r49772 2015-02-27 17:10:04 +0900

special variable 用のインデックスを vm_core.h で enum 型として定義するようにして、マジックナンバーを埋め込んでいたところで定義した定数を利用するようにリファクタリングしています。 また lep_svar_place() で th が NULL の場合を考慮するようにしています。 たぶんこの th のチェックがこのコミットの肝なんだと思います。

hsbt: r49773 2015-02-27 20:55:47 +0900

rake に最新版をマージしています。 typo 修正や private メソッドの呼び出し削除など細かな修正みたいです。

2015-02-26 ruby-trunk-changes r49757 - r49760

[][]ruby-trunk-changes r49757 - r49760

今日は Complex のかけ算で符号を保存する修正などがありました。

nobu: r49757 2015-02-26 02:05:26 +0900

Complex#* で乗算の時にどちらかが 0 でももう一方の符号情報を保持したままかけ算を行う safe_mul() を定義してこれを利用するようにしています。同じ 0.0 でも Float には +0.0 と -0.0 があるんですよね。

nobu: r49758 2015-02-26 02:19:57 +0900

make test-rubyspec で rubyspec を実行する時に fake.rb を読み込ませるようにしています。 また fake.rb で ENV["RUBYOPT"] に自分自身を require させる -r#{__FILE__} を追加して子プロセスにも fake.rb をロードさせるようにしています。 また tool/fake.rb で rubyarchhdrdir を設定するようにしています。rubyspec で拡張ライブラリビルドが必要だったんですかね。

nobu: r49759 2015-02-26 09:48:10 +0900

configure での dtrace コマンドの動作チェックで生成されたソースファイルをビルドしてみてヘッダが利用可能かまでみるようにしています。

nobu: r49760 2015-02-26 17:01:54 +0900

tool/runruby.rb でプロセスの起動時に共有ライブラリをロードする環境変数 LD_PRELOAD を Linux では利用するようにしていましたが、OS X でも DYLD_INSERT_LIBRARIES という環境変数名で同様のことができるので両方に対応しています。