[#42194] Enhancing Numeric#step — "Akinori MUSHA" <knu@...>

 Numeric#step の仕様の拡張を提案します。

26 messages 2010/09/08
[#42196] Re: Enhancing Numeric#step — Yukihiro Matsumoto <matz@...> 2010/09/08

まつもと ゆきひろです

[#42200] Re: Enhancing Numeric#step — "Akinori MUSHA" <knu@...> 2010/09/08

At Wed, 8 Sep 2010 22:46:57 +0900,

[#42204] Re: Enhancing Numeric#step — Yukihiro Matsumoto <matz@...> 2010/09/09

まつもと ゆきひろです

[#42232] 1.9.2 readline can't handle cursorkeys, mbcs chars etc (msvcrt) — arton <artonx@...>

artonです。

11 messages 2010/09/10

[#42269] [Ruby 1.9-Bug#3836] Kernel.system, spawnがスペースを含むパスで動作しない — Hiroki Najima <redmine@...>

チケット #3836 が更新されました。 (by Hiroki Najima)

12 messages 2010/09/16
[#42270] WindowsでのKernel.systemの挙動、一貫性について — NAJIMA Hiroki <h.najima@...> 2010/09/16

名島(Nazy)と申します。

[#42310] ビジースレッドがあるとコンテキストスイッチが起きづらくなる — kuwamoto shintaro <beuniv@...>

こんにちは。

9 messages 2010/09/29
[#42315] [bug:trunk] ビジースレッドがあるとコンテキストスイッチが起きづらくなる — "U.Nakamura" <usa@...> 2010/09/30

こんにちは、なかむら(う)です。

[ruby-dev:42175] Re: [Ruby 1.9-Bug#3781][Open] FIBER_USE_NATIVE が有効だと落ちるスクリプトがある

From: Satoshi Shiba <shiba@...>
Date: 2010-09-03 06:30:39 UTC
List: ruby-dev #42175
芝と申します。

Makoto Kishimoto wrote:
> Bug #3781: FIBER_USE_NATIVE が有効だと落ちるスクリプトがある
> http://redmine.ruby-lang.org/issues/show/3781
> 
> 起票者: Makoto Kishimoto
> ステータス: Open, 優先度: Normal
> カテゴリ: core, Target version: 1.9.3
> ruby -v: ruby 1.9.3dev (2010-09-01 trunk 29159) [x86_64-freebsd8.0]
> 
> 手元のスクリプト(再現る最小のケースを絞り込むのが無理そうなので、そのまま添付します)が、FIBER_USE_NATIVE が有効な ruby で落ちます。
> 
> x86-64 FreeBSD と i686 Linux で落ちかたは違いました。ruby の吐くメッセージとバックトレースを以下そぞれ付けます。

落ちる原因を調べたので、ご報告いたします。

i686 Linux 環境で調べたところ、gc 中に C のスタックオーバーフローを起こ
すことが原因のようです。

[BUG] object allocation during garbage collection phase
というメッセージは、gc 中に C のスタックオーバーフローが発生し、それに対
するバックトレースを生成しようとして吐いているみたいです。

きしもとさんからのご報告にあったバックトレースを見れば分かるように、gc
時に C のスタックが結構な勢いで伸びているため(これぐらい普通なのか
な)、C のスタック領域を64KBしか確保しない現在の Fiber の実装だと C のス
タック領域が GC 中に足りなくなってしまっているようです。

下のパッチのように Fiber に対して割り当てる C のスタックサイズを増やせ
ば、(根本的な解決には全くなっていませんが)きしもとさんからのご報告に添
付されていた reduct.rb で落ちることはなくなりました。

GC 中にスタックオーバーフローが発生しそうなときって今はどう対応してるん
でしょう? gc.c 内の stack_check() の返り値が 1 になっても特に例外を吐く
ようなことはしていないみたいなんですが。



Index: cont.c
===================================================================
--- cont.c  (revision 29154)
+++ cont.c  (working copy)
@@ -45,7 +45,7 @@
 #define RB_PAGE_SIZE (pagesize)
 #define RB_PAGE_MASK (~(RB_PAGE_SIZE - 1))
 static long pagesize;
-#define FIBER_MACHINE_STACK_ALLOCATION_SIZE  (0x10000 / sizeof(VALUE))
+#define FIBER_MACHINE_STACK_ALLOCATION_SIZE  (0x50000 / sizeof(VALUE))
 #endif

 #define CAPTURE_JUST_VALID_VM_STACK 1


In This Thread