今日は 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 設定。