ruby-trunk-changes r62452 - r62469

今日は MJIT の cross compile 向けの修正や thread.c/thread_pthread.c のリファクタリングなどがありました。

kazu: r62452 2018-02-17 23:03:52 +0900

r62436 の test/rubygems/test_gem_server.rb の正規表現リテラルの警告除去の続き。 でくくって文字クラスにしていましたが、\s だけになったのでもう は不要だったので削除しています。

normal: r62453 2018-02-18 09:38:35 +0900

r62450 の再修正。拡張ライブラリ fiddle の型に応じた pack/unpack の指示子を持つ PACK_MAP の TYPE_VOIDP の時の値を PACK_MAP[TYPE_LONG_LONG] にしていましたが long long と void * のサイズが同じときだけにしています。

svn: r62454 2018-02-18 09:38:36 +0900

version.h の日付更新。

normal: r62455 2018-02-18 09:38:40 +0900

thread.c の変数や引数の名前の時刻の終端を表すものを to から end に改名しています。

normal: r62456 2018-02-18 09:38:45 +0900

構造体 struct timespec で表現されている時刻の比較をする処理を timespec_cmp() という関数に切り出しています。

normal: r62457 2018-02-18 11:12:13 +0900

thread.c の update_timespec() の内容を timespec_update_expire() に委譲する変更と、r62455 と同様に to -> end に変数名を改名する変更です。

normal: r62458 2018-02-18 11:12:18 +0900

thread.c の do_select() から update_timespec() を呼ぶ時に渡す timeout をタイムアウトがある時のみ有効なポインタを渡すようにしています。

normal: r62459 2018-02-18 11:12:23 +0900

native_cond_timeout() でタイムアウトのチェックのために変数をわざわざコピーしていたところを同じ変数を使いまわすように書き換えています。処理を軽量化するためみたいです。また timespec_add() はオーバーフロー対策を含んでいるので冗長なチェックを削っています。

usa: r62460 2018-02-18 11:51:31 +0900

mjit.c で mswin 環境でコンパイラコマンドラインオプションを cl.exe を使うかどうかで分岐するようにしています。

normal: r62461 2018-02-18 12:00:28 +0900

thread.c の double2timespec() が struct timespec をそのまま戻り値に持つようになっていたのを、引数に struct timespec のポインタを受け取るようにして、戻り値もそのポインタを返すようにしています。また引数の double を変換してオーバーフローした時に NULL を返すようにしています。Float::INFINITY が扱えるようにしているみたいです。

normal: r62462 2018-02-18 12:00:33 +0900

Thread#join の引数のタイムアウトに負の値を渡した時に 0 が指定されたのと同様に処理するようにしています。

nobu: r62463 2018-02-18 14:10:52 +0900

mjit.c で可変長引数を扱うのに va_copy() を使うのをやめています。移植性に問題があって cross compile が難しかったみたいです。

nobu: r62464 2018-02-18 14:12:26 +0900

aclocal.m4 から r62463 で削除した tool/m4/ruby_check_va_copy.m4 の m4_include を削除しています。

nobu: r62465 2018-02-18 15:21:28 +0900

r62460 の mjit.c のコンパイラオプションの修正の追加修正。常に CC_DLDFLAGS_ARGS のオプションを最後に移動するようにしています。cl.exe 以外でオプションの順序は重要ではないので分岐は不要だったみたいですね。

normal: r62466 2018-02-18 16:54:10 +0900

thread_pthread.c にはシステムスレッド(pthread)をプールに管理しておいて Thread を頻繁に生成/削除した時に毎回 pthread を実際に生成/削除せずにすむようにする cache 用のリストがある(けどデフォルトでは有効になってない)のですが、fork 時にこのリストを排他するための mutex を再初期化するように修正しています。さらにリストのエントリである struct cached_thread_entry のメンバーも rb_nativethread_cond_t をポインタで持ってたのを埋め込みで持つようにしたり rb_nativethread_id_t を持つようにしたりと変更して、use_cached_thread() の中でより早めに th->thread_id にセットするようにしています。

kazu: r62467 2018-02-18 17:11:50 +0900

README.ja.md に Mac OS X という表記があったところを macOS に変更しています。

nobu: r62468 2018-02-18 18:23:47 +0900

thread_pthread.c のインデント修正のみ。

nobu: r62469 2018-02-18 18:33:21 +0900

mjit.c の compile_c_to_so() で --include-pch オプションの引数部分を埋める処理が __clang__ が定義されている時だけ配列に用意されているので、代入部分も分岐するようにしています。