[ruby-dev:47919] Re: [ruby-changes:32633] nobu:r44712 (trunk): thread_pthread.c: get current main thread stack size

From: "NARUSE, Yui" <naruse@...>
Date: 2014-01-28 08:49:43 UTC
List: ruby-dev #47919
スレッドのスタック情報の取得は前にまとめたことがありますが、
http://d.hatena.ne.jp/nurse/20100204
OSごとの依存が激しいので、下手に抽象化せずOSごとにがっつり分岐して
書いていただいたほうがいいと思います。

あと、どのOSを念頭にいじったのかは絶対に書いてください。
書いてくれないとまた壊すので。

2014年1月28日 16:40 Nobuyoshi Nakada <nobu@ruby-lang.org>:
> なかだです。
>
> (2014/01/28 10:06), KOSAKI Motohiro wrote:
>> まず、単純にifdefにRLIMIT_STACKの有無が抜けているというのもあるが、
>> メインスレッドならRLIM_STACKで取れるというのがLinux固有なので、
>> それはHAVE_GETRLIMITとかの機能有無じゃなく、ifdef linux でないと
>> おかしいように思える。
>
> そこはlinuxではなくMacOS X用でした。linuxでは解決していなかったので、
> r44726で再修正してみました。
>
>> Linuxだとrlim_curがulongでinfinityが-1だからつまりULONG_MAX扱いになって
>> 常にオーバーフロー扱いにならない。
>> というか RLIM_INFINITY の値はOS依存だから大小比較するまえに
>> if (rlim.rlim_cur == RLIM_INFINITY) とかないとおかしくないですか?
>
> 試した限りではOS XではRLIM_INFINITYにはならないようですが、後で考えてみ
> ます。
>
>> 次に、get_stack()で使っているpthread_getattr_np()はもうちょっと賢いことをやっていて、
>> /proc/self/mapsみてVMAのサイズを超えないように調整してる。これを避けたのは
>> たぶん、シグナルコンテキストというのを意識したのだと思うし、それは正しいと
>> 思うのだけど、ちょっとラフすぎる印象。
>
> それは気づいてませんでした。ruby_stack_overflowed_p()ではget_stack()は
> 避けるべきかも…。
>
>> どうせ current threadとれないときは、get_stack呼んじゃってるんだから、これだったら
>> メインスレッドのケースも get_stack呼んでしまったほうが誤判定減るように思えます。
>
> 今はそんな感じです。
>
> --
> --- 僕の前にBugはない。
> --- 僕の後ろにBugはできる。
>     中田 伸悦



-- 
NARUSE, Yui  <naruse@airemix.jp>

In This Thread