ruby-trunk-changes r58352 - r58365

今日は system stack overflow の例外処理時に signal mask を外し忘れていた不具合の修正などがありました。

nobu: r58352 2017-04-14 21:51:46 +0900

configure の --with-setjmp-type オプションに sigsetjmp に続けてカンマ区切りでオプションを渡せるようにしています。

nobu: r58353 2017-04-14 21:59:59 +0900

SystemStackError の処理時に sigprocmask(3) で処理中の signal の mask を解除するようにしています。一度 SystemStackError の発生後に再び stack overflow でシグナルを受信した時に SEGV してしまっていたようです。 [ruby-core:79285] [Bug #13164]

nobu: r58354 2017-04-15 01:07:45 +0900

r58353 で追加した raise_stack_overflow() で HAVE_SIGPROCMASK の値で preprocessor で分岐させるようにしています。

svn: r58355 2017-04-15 01:07:46 +0900

version.h の日付更新。

ko1: r58356 2017-04-15 03:14:25 +0900

別 Thread での IO#close のテストで IO#gets を呼び出す Thread が IO#gets で sleep 状態に入るのを待つのに sleep 0.01 でタイミングに依存した待ちかたをしていたのを Queue を使って IO#puts 呼び出しの直前まで待つのと、そこから sleep 0.1 で待つようにして確実性を上げています。

ko1: r58357 2017-04-15 03:19:37 +0900

r58356 の再修正で sleep 0.1 ではなくて Thread#status が sleep になるまで 0.01秒間隔でチェックするループを回すようにしちえます。

ngoto: r58358 2017-04-15 04:12:51 +0900

r52559 で pack.c に Solaris Studio の cc のバグの対応のため volatile を付けるために AVOID_CC_BUG というマクロの定義のしていましたが、12.4 というバージョンだけでなく 12.5 でも問題があったそうなので分岐条件を変更しています。 [ruby-core:80690] [Bug #11684]

normal: r58359 2017-04-15 09:46:00 +0900

RSTRUCT_LEN() というマクロが rb_struct_size() に展開されていたのを NUM2LONG() を挟むようにしています。VALUE で Integer を返していたみたいですね。ひえー。 [ruby-core:80692] [Bug #13439]

svn: r58360 2017-04-15 09:46:01 +0900

r58359 で新規追加されたファイルの svn property 設定。

nobu: r58361 2017-04-15 11:07:01 +0900

r58353 で stack overflow の例外発生前に signal mask を解除するのに sigprocmask(3) を使っていましたが pthread_sigmask() が使えたらそちらを使うようにしています。

nobu: r58362 2017-04-15 11:09:27 +0900

r58350 で rb_yield_value() を最適化したのと同様に可能なら __builtin_choose_expr() や __builtin_constant_p() を駆使して rb_funcall() をマクロとして定義して rb_funcallv() を利用するように最適化しています。

nobu: r58363 2017-04-15 11:37:21 +0900

check_stack_overflow() で page fault が発生したページが最後の TAG に近かったら1つ TAG を取り消すようにしています。元は stack pointer のページで判定していましたが不正アクセスがあったページを基準にするように変更しています。

normal: r58364 2017-04-15 16:13:05 +0900

r58359 で RSTRUCT_LEN() のテストのために拡張ライブラリを導入したのに対応して ext/-test-/struct/depend も導入しています。またついでに? enc/depend も更新しています(tool/update-deps で生成したのだと思います)。

svn: r58365 2017-04-15 16:13:06 +0900

r58364 で新規追加されたファイルの svn property 設定。