From: Yukihiro Matsumoto Date: 2009-11-02T18:27:59+09:00 Subject: [ruby-dev:39608] Re: infinite recursive call to C function まつもと ゆきひろです In message "Re: [ruby-dev:39605] Re: infinite recursive call to C function" on Mon, 2 Nov 2009 17:36:42 +0900, Nobuyoshi Nakada writes: |> に終わります。ので、「どのファイル」、「何行目」、「どのメソッ |> ド」の情報(×呼び出しネスト数)だけどこかに保存しておければ、 |> 無駄なオブジェクト割り当てが削れるはずなんですが。「どこに保 |> 存するか」について良いアイディアがないんですよねえ。 | |専用のスタックにメソッドの呼び出しごとに積んでいくとかですか。 そんな感じですね。 |> これを当てると、r23720をrevertしなくてもよい、というわけでは |> ないんでしょうね。 | | if (ruby_threadptr_stack_check(th)) return; | |と、ruby_threadptr_handle_critical_exception()でスタックにある程 |度余裕ができるまで待っています。単純にr23720をrevertするだけでも、 |バックトレースが出なくなるだけでSEGVはしないようですが。 ちょっと確認させてください。無限再帰でSEGVするのは、 [ruby-dev:39602]のパッチとr23720 のrevertで解決するんですか? であれば、[ruby-dev:39602]のコミットに賛成します。解決しなく ても、そんなに悪いパッチではなさそうですが。 元々の「sizeをcountのalias」では発生しなくなってしまったので、 遠藤さんが[ruby-dev:39592]で紹介した class Symbol include Enumerable alias to_enum zip end :each.zip(:each) { } とかが良いのではないかと思います。