From: Nobuyoshi Nakada Date: 2014-01-28T16:40:04+09:00 Subject: [ruby-dev:47918] Re: [ruby-changes:32633] nobu:r44712 (trunk): thread_pthread.c: get current main thread stack size なかだです。 (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はできる。 中田 伸悦