ruby-trunk-changes r52151 - r52186

今日は kosaki さんが fifo と load のまわりの修正/テスト追加や require の(multi thread 環境での)高速化、OS/2Borland-C のサポート終了などたくさんコミットされてた他、標準添付ライブラリ securerandom と open-uri の frozen_string_literal: true 化がありました。

kosaki: r52151 2015-10-18 06:09:10 +0900

fifo からの require 対策での GVL 解放にまつわる変更(r50887 および r52139)の続き。 r52139 で load 用の fd を O_NONBLOCK つきで開いてしまっているため open(2) した後で fcntl(2) で flag をクリアするようにしています。 通常のファイルでも filesystem によっては(特に FUSE だと) O_NONBLOCK に指定されると挙動が変化する可能性がある(すぐに読めない可能性がある)ので、残しておくのは危険とのこと。また fifo の場合は読めるようになるまで待たないといけないので、やっぱり GVL を外して open しなおすようにしています。 その他 fifo からの load のテスト追加や条件分岐の整理などリファクタリング[Bug #11060] [Bug #11559]

kosaki: r52152 2015-10-18 08:31:23 +0900

fptr_finalize() で fd を close(2) する時に mode をみて writable でなければ GVL を解放しないようにしています。 writable な fd は NFS で block する可能性があるけど、readonly だと block しないので GVL を解放しなくても安全とのこと。 これで require のベンチマークがだいぶ速くなるそうです。 [Bug #11060] [Bug #11559]

nobu: r52153 2015-10-18 08:38:18 +0900

r52151 で close(2) の戻り値を無視しているところでの警告を除去するため (void) を追加しています。

nobu: r52154 2015-10-18 08:41:14 +0900

r52151 で追加した open_load_file() で ruby_is_fd_loadable() のエラー時に明示的に errno を設定するようにしています。また errno を参照するのがその後の close(2) の呼び出しの後だったので errno を別の変数に退避しておくようにしています。

nobu: r52155 2015-10-18 08:59:00 +0900

r52154 で errno の退避用に変数を宣言していましたが、同名の変数が外のブロックに宣言済みだったのでそれを使うようにしています。

kosaki: r52156 2015-10-18 09:13:52 +0900

r52152 の close() 時の GVL 解放の判定の変更を revert しています。 readonly でも block しうる環境があったか、少なくとも保証はなかったのかも。 コミットメッセージには r52154 と書かれてますが r52152 です。

kosaki: r52157 2015-10-18 09:21:03 +0900

r52151 で fifo からの load の時に再度 GVL の解放つきで open(2) しなおしていたのを、rb_thread_wait_fd() で読み込み可能になるまで待つように修正しています。

kosaki: r52158 2015-10-18 09:33:44 +0900

r52154 で ruby_is_fd_loadable() のエラー時の errno を EISDIR にセットするようにした結果、エラーになる条件が変化していたのを、fd が通常ファイル(S_ISREG())か fifo の時だけ成功するようにして、ディレクトリ以外のエラーの時は errnor に ENXIO (Device not configured) をセットするようにしています。

kosaki: r52159 2015-10-18 09:40:57 +0900

r52156 で revert された r52152 を再度 commit しています。操作ミスだったのかな。

kosaki: r52160 2015-10-18 10:17:50 +0900

include/ruby/defines.h の DOSISH というプラットフォームに関するマクロの定義にコメントを追記して、これが Windows 風のファイルパスを持つことを示していることを明記しています。

kosaki: r52161 2015-10-18 10:18:34 +0900

OS/2 のサポートを終了させています。 Good-bye OS/2.

svn: r52162 2015-10-18 10:18:55 +0900

r52161 で NEWS ファイルの末尾の改行が消えてたのを戻しています。

kosaki: r52163 2015-10-18 10:19:13 +0900

file.c の rb_file_identical_p() で DOSHISH と _WIN32 による条件付きコンパイルの分岐を整理しています。 DOSISH による分岐は不要(というか _WIN32 の時の処理を DOSISH の時と同じにできる)のでシンプルにしています。

nobu: r52164 2015-10-18 10:30:47 +0900

r52161 の OS/2 関連のコード削除時に #endif の削り漏れがあったのを修正。

kosaki: r52165 2015-10-18 10:43:53 +0900

同じく r52161 で io.c で #if の条件のかっこの閉じ忘れがあったのを修正。

kosaki: r52166 2015-10-18 10:44:31 +0900

open_load_file() で fifo の時にあらためて rb_thread_wait_fd() で待つようにしたところにその意図をコメントとして追記しています。

kosaki: r52167 2015-10-18 11:08:56 +0900

dln.c, gc.c および ext/sdbm/_sdbm.c で _WIN32 と __CYGWIN__ についてのチェックを修正しています。 _WIN32 が真の時は __CYGWIN__ は常に偽なので両方チェックする必要はないそうです。

kosaki: r52168 2015-10-18 11:10:34 +0900

Borland-C によるコンパイルも support を終了させています。 Good-by Borland-C.
ちなみに Good-by も Good-bye もどちらも正しいそうです(by が英国式で bye が米国式らしい)。

svn: r52169 2015-10-18 11:11:23 +0900

r52168 で NEWS ファイルの末尾の改行がなかったので追加しています。

kosaki: r52170 2015-10-18 11:17:46 +0900

r52168 の Boarland-C のサポート削除の追加。標準添付ライブラリ mkmf に bccwin 対応が残ってたのを削っています。

kosaki: r52171 2015-10-18 11:23:18 +0900

dln.c から条件付コンパイルの defined(__WATCOMC__) という条件チェックを削っています。 __WATCOMC__ ってなんだろう…? OpenWatcom というコンパイラ? 開発環境? のものみたいです。

nobu: r52172 2015-10-18 11:40:59 +0900

fifo の require についてのテストの実行条件が Windows かどうかになっていましたが、File.mkfifo が定義されているかどうかで分岐するように修正しています。

nobu: r52173 2015-10-18 12:07:39 +0900

r52151 で追加した fifo からの load についてのテストで fifo から load できるかどうかは問わず、プロセスがブロックしてしまわないかどうかだけチェックするようにしています。

akr: r52174 2015-10-18 12:58:34 +0900

標準添付ライブラリ securerandom に magic comment "frozen_string_literal: true" を追加しています。コードには変更は不要みたいです。

nobu: r52175 2015-10-18 13:22:44 +0900

r52151 で load 用に fd を開いた時の O_NONBLOCK を fcntl() でリセットするのは O_NONBLOCK や O_NDELAY を使って開いた時だけにしています。 Windows で LoadError が発生していたそうです。

kosaki: r52176 2015-10-18 14:40:25 +0900

common.mk の make benchmark のルールのところにコメントでサポートされている環境変数について追記しています。

kosaki: r52177 2015-10-18 14:40:55 +0900

common.mk の test-all のところにも make test-all でのオプションの渡しかたについてコメントを追記しています。

kosaki: r52178 2015-10-18 14:41:34 +0900

r52168 の Borland-C のサポート削除の続き。 include/ruby/backward/util.h にも defined __BORLANDC__ がありました。

kosaki: r52179 2015-10-18 14:42:08 +0900

random.c の fill_random_bytes_syscall() で syscall(SYS_getrandom, ...) を呼んでみて(実際に呼んでみないとサポートされているかどうかわからないため。 r51182 のあたりでの追加部分)、その結果をキャッシュする変数 try_syscall への代入を ATOMIC_SET() を使うようにしています。

kosaki: r52180 2015-10-18 14:42:37 +0900

r51374 で fill_random_bytes_syscall() での syscall(SYS_getrandom, ...) の flags に GRND_NONBLOCK を渡すようにしていましたが、ここで GRND_NONBLOCK を渡しても EAGAIN がかえってきたら結局 /dev/urandom からの読み込みを行なう処理に fallback するため意味がないのでやめています。

kosaki: r52181 2015-10-18 14:43:08 +0900

random.c の fill_random_bytes_urandom() のコメントに O_NONBLOCK と O_NOCTTY フラグは /dev/urandom については意味がないことを追記しています。しかしフラグを渡すのは削ってないのですが、これは /dev/urandom にあるファイルが実際には urandom のデバイスではないというケースを考慮してとのこと。

kosaki: r52182 2015-10-18 14:46:21 +0900

r52180 の syscall(SYS_getrandom, ...) のフラグ GRND_NONBLOCK の削除を revert しています。

nobu: r52183 2015-10-18 14:51:44 +0900

r52181 のコメントの typo 修正。

nobu: r52184 2015-10-18 14:53:26 +0900

r50464 や r50466 で追加され r50506 で改名された T_DATA 型のオブジェクトの操作マクロ TypedData_Wrap_Struct() などの実体の関数群で r47717 で deprecated になった struct RData の利用時の警告のために定義しているものが inline 化が有効でない時にうまく働かないみたいなので defined(__NO_INLINE__) をチェックするようにしています。

nobu: r52185 2015-10-18 19:21:35 +0900

r52184 の再修正。rb_data_object_wrap_warning() と rb_data_object_get_warning() の宣言も条件付コンパイル内に入れるように移動しています。

akr: r52186 2015-10-18 21:17:52 +0900

標準添付ライブラリ open-uri とそのテストスクリプトに frozen_string_literal: true の magic comment をつけています。