ruby-trunk-changes r64527 - r64535

今日は thread 間通知用に eventfd(2) を使うようにする変更や nano second 精度で時間を扱うための rb_hrtime_t という型の導入などがありました。

normal: r64527 2018-08-25 04:19:01 +0900

Linux では thread 間の通知のために pipe を使っているところでかわりに eventfd(2) による fd を利用するようにして fd 節約しています。 pipe 作ると読み書きの両端で 2つ fd を消費するけど eventfd(2) だと 1つですむ、というところが動機かなぁ。 [ruby-core:88563] [Misc #15011]

svn: r64528 2018-08-25 04:19:02 +0900

version.h の日付更新。

normal: r64529 2018-08-25 05:28:08 +0900

IO#close で読み込み中の Thread に通知するのが再利用された fd で間違った Thread に通知されないようにした r63216 のテストで IO#sysread していたのを IO#read に変更しています。 IO#sysread は rb_wait_for_single_fd() を呼ぶのでそれがなんかよくない、って書いてあるんですが、なにがどう良くないのかわからない…。

naruse: r64530 2018-08-25 07:32:07 +0900

rubyspec の socket のテストで AIX のための platform_is_not の条件を追加しています。

normal: r64531 2018-08-25 11:32:10 +0900

標準添付ライブラリ drb の DRb::DRbTCPSocket#shutdown および #close_shutdown_pipe で pipe が close 済みかどうかチェックしてから close してたのを、IOError が発生しなくなったのでチェックなしで close するようにしています。

normal: r64532 2018-08-25 11:32:15 +0900

r64531 の続きで DRb::DRbTCPSocket#close で shutdown を呼んで accept してる Thread に通知して IO.select から起こしてから閉じるようにしています。

normal: r64533 2018-08-25 15:58:35 +0900

struct timespec の扱いが苦痛なのでってことで rb_hrtime_t という整数型で nano second 精度の時間を扱うための型を導入していいます。通常は 64bit で MY_RUBY_BUILD_MAY_TIME_TRAVEL というマクロが定義されていたら(たぶん一種のジョークなのでしょう。今はこっちは通らないです) 128bit 整数として定義するようにしています。これを扱うための関数群も追加しています。いやー、結局 pthread_xxx() などの引数にするために struct timespec との変換は必要だし本当にこれで読みやすくなってるのか? という疑問は生じますが、この結果マシンスタックの消費量は減ってるそうです。 [ruby-core:88582] [Misc #15014]

svn: r64534 2018-08-25 15:58:36 +0900

r64533 の新規追加ファイルの svn property 設定。

normal: r64535 2018-08-25 18:02:50 +0900

r64533 で追加した rb_hrtime_t 型とその操作関数群についてドキュメント用のコメントを追加しています。 [ruby-core:88616] [Misc #15014]