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

From: Nobuyoshi Nakada <nobu@...>
Date: 2014-01-28 07:40:04 UTC
List: ruby-dev #47918
なかだです。

(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はできる。
    中田 伸悦

In This Thread