ruby-trunk-changes r42728 - r42733

今日は HP-UX の Thread 関係のコードの修正と thread_pthread.c のリファクタリングだけでした。

nobu:r42728 2013-08-30 10:26:05 +0900

r42716 で HP-UX での Thread の利用のためスタックアドレスとサイズを取得する関数でページサイズの取得のための gettune() が返す値の単位の解釈が間違っていたので修正しています。 [ruby-core:56863]

svn:r42729 2013-08-30 10:26:11 +0900

version.h の日付更新。

nobu:r42730 2013-08-30 22:37:46 +0900

thread_pthread.c で get_stack() を get_main_stack() というマクロで wrap するようにしています。 ChangeLog をみるともっと変更が書いてあるのでこの後の修正とまとめて入るはずだったのだと思われます。

nobu:r42731 2013-08-30 22:37:51 +0900

thread_pthread.c の #ifdef での分岐によって利用されない変数の宣言を同じ #ifdef の条件内に入れたり、pthread_attr_t へのポインタを変数として宣言しておくことで pthread_create() 部分を #ifdef で分岐しなくてもすむようにしたりするリファクタリング

nobu:r42732 2013-08-30 22:37:59 +0900

thread_pthread.c でマシンスタックのアドレスとサイズを取得するのに get_stack_of() というマクロが使えたらそれを使うようにしています。この get_stack_of() というのがどの環境で使えるものか検索しても出てこなかったのですが、ともあれ実行中のスレッドではなくて、生成したスレッドでその pthread_t (thread_id) を渡して値を取得するというインタフェースらしく(pthread_self() を渡してもだめなんでしょうね……) native_thread_create() で th->interrupt_lock のロックを取得してからスレッド生成して、スタックの情報取得後にロックを解放、生成されたスレッドでもロック取得/解放を行なうことで、生成元のスレッドがスタックの情報をセットしてくれるのを待って先に進むようにしています。

nobu:r42733 2013-08-30 22:39:22 +0900

r42730 から r42732 の ChangeLog のエントリが重複してしまっていたので削除しています。