今日は Fiber のスタック領域の準備の不具合修正などがありました。
drbrain:r32414 2011-07-06 07:59:27 +0900
sorah:r32415 2011-07-06 14:54:01 +0900
CGI のテストで Date ヘッダの時刻が生成する時とチェックする時で秒が変化するとテストがエラーになるのに対処しています。
svn:r32416 2011-07-06 14:54:06 +0900
version.h の日付更新。
sorah:r32417 2011-07-06 18:12:33 +0900
r32415 のテストの修正で不要になった変数の削除と、少しコードの整形。
kosaki:r32418 2011-07-06 21:21:50 +0900
cont.c の mmap() の返り値の不要なキャストを削除しています。
kosaki:r32419 2011-07-06 21:22:56 +0900
cont.c で mmap() の返り値のエラーチェックは MAP_FAILED と比較するようにしています。
kosaki:r32420 2011-07-06 21:24:25 +0900
cont.c で Fiber のためのスタック領域を mmap で確保する時に MAP_STACK フラグが利用可能ならば指定に追加するようにしています。 MAP_STACK はスタック領域を確保する時用のフラグです。現状は特に意味はないようですが、アーキテクチャによってスタック領域として利用できるアドレスに制限があるような場合に、カーネルが適切に調整したアドレスを返せるように指定するもののようです。
kosaki:r32421 2011-07-06 21:29:09 +0900
さらに Fiber 用に確保したスタック領域の最後の 1 page をオーバフロー検出用にするために mprotect(2) で属性をセットしているところが読み書き可能に設定してしまっていて全く意味がなかったので PROTO_NONE を指定するように修正しています。また saved_thread->machine_stack_maxsize にはこのガード用ページのぶんを除いた実際に利用できるサイズを格納するようにしています。 [ruby-dev:44043] [Bug #4983]
kosaki:r32422 2011-07-06 21:31:53 +0900
Fiber のスタック領域確保の時に VALUE のポインタとして扱っていてのを char * で扱うようにしています。このほうが自然ですよね。