渡辺哲也です。

In message "[ruby-dev:30791] 1.9 coredump"
    on 07/05/18, WATANABE Tetsuya writes:

|ruby 1.9.0 (2007-05-17 patchlevel 0) [i686-linux]
|
|上で core して落ちますので報告します。

の件ですが、スタックサイズの変更で対応(回避)できるようなのでお
知らせします。core の条件として扱うファイル量が関係していまし
た。

------------------------------
スタックオーバーフローのハンドリング(Stack Overflow Handling)
http://www.nminoru.jp/~nminoru/programming/stackoverflow_handling.html
------------------------------

を読んでいたのですが、スタックサイズを倍、三倍にすることで扱う
ファイル量を増やしても core しなくなることが確認できました。

確認したシステムは Vine Linux 4.1 になります。デフォルトでは 
8MB です。

------------------------------
$ ulimit -s
8192
------------------------------

core する場合にはスタックサイズを増やすことが有効のようです。

以下は core した場合に ulimit -s でスタックサイズを増やして 
core を回避した経過です。ruby 1.9 のソースコードで試しています。

------------------------------
$ rg.rb SIGV *.c
zsh: 16153 segmentation fault  rg.rb SIGV *.c

$ ulimit -s 16384
$ rg.rb SIGV *.c
signal.c:#ifdef SIGVTALRM
signal.c:    {"VTALRM", SIGVTALRM},
signal.c:    sigdelset(&mask, SIGVTALRM);
signal.c:    if (sig == SIGVTALRM) {
signal.c:       rb_raise(rb_eArgError, "SIGVTALRM reserved for Thread; can't set handler");
rg.rb SIGV *.c  1.88s user 1.31s system 97% cpu 3.255 total

$ rg.rb SIGV *.c *.h */*.c
signal.c:#ifdef SIGVTALRM
signal.c:    {"VTALRM", SIGVTALRM},
signal.c:    sigdelset(&mask, SIGVTALRM);
signal.c:    if (sig == SIGVTALRM) {
signal.c:       rb_raise(rb_eArgError, "SIGVTALRM reserved for Thread; can't set handler");
zsh: 16164 segmentation fault  rg.rb SIGV *.c *.h */*.c

$ ulimit -s 24576
$ rg.rb SIGV *.c *.h */*.c
signal.c:#ifdef SIGVTALRM
signal.c:    {"VTALRM", SIGVTALRM},
signal.c:    sigdelset(&mask, SIGVTALRM);
signal.c:    if (sig == SIGVTALRM) {
signal.c:       rb_raise(rb_eArgError, "SIGVTALRM reserved for Thread; can't set handler");
rg.rb SIGV *.c *.h */*.c  1.82s user 1.70s system 98% cpu 3.567 total
------------------------------