From: KOSAKI Motohiro Date: 2011-07-06T11:41:01+09:00 Subject: [ruby-dev:44041] Re: [ruby-core:37707] [Ruby 1.9 - Bug #3781] FIBER_USE_NATIVE が有効だと落ちるスクリプトがある >> int >> ruby_stack_check(void) >> { >> #if defined(POSIX_SIGNAL) && defined(SIGSEGV) && defined(HAVE_SIGALTSTACK) >> return 0; >> #else >> - return stack_check(); >> + return stack_check(WATER_MARK); >> #endif >> } > > 今気づいたのですが、この関数の仮定がFiberで成立してない気がします。 > なかださんか、ささださんに言うべきだけど。 > #if defined(POSIX_SIGNAL) && defined(SIGSEGV) && defined(HAVE_SIGALTSTACK) > の場合は、sigsegv()ハンドラで実際にSIGSEGVが配送されてからsysstack_errorをraiseするかどうか > 決めてるけど、ここで判定に失敗してsysstackではなくrb_bugのほうに行ってしまうのもバグっぽい > 気がします。FiberでGC以外が原因でstackあふれたときに同じくSEGVしてしまうので。 すいません、これ誤報でした。 つい最近いれた、[Bug #1813] 対応でちゃんとraise sysstack するようになってました。 現在のtrunkだと、gc時にスタックつきやぶると gc -> sigsegv -> raise -> rb_newobj -> gcネストで死亡 となります。なので、nariさんパッチですべて解決のようです。