From: nobu.nakada@... Date: 2003-06-27T02:01:03+09:00 Subject: [ruby-dev:20465] Re: 原因不明のSEGV なかだです。 At Thu, 26 Jun 2003 22:43:28 +0900, yamamoto madoka wrote: > 原因は良くわからないのですが、 > SEGVで落ちる現象に遭遇しました。 > > 落ちる場所は、コードを変えると移動してしまいます。 > > またしても、socket、スレッド、GCあたりが絡んでいる > スクリプト中です。 > > rubyは1.8スナップショット最新の物、 > OSはredhat7.3、8.0です。 > > 以下、ElectricFence付きでリンクしなおしたRubyでの > スタックトレースです。 > > Program received signal SIGSEGV, Segmentation fault. > [Switching to Thread 1024 (LWP 24325)] > mark_locations_array (x=0x4616f2dc, n=0) at gc.c:505 > 505 { > (gdb) bt > #0 mark_locations_array (x=0x4616f2dc, n=0) at gc.c:505 > #1 0x08061349 in thread_mark (th=0x41f5dd54) at eval.c:8020 ここで、th->stk_ptrとth->stk_lenおよびth->stk_ptr[th->stk_len] の値はどうなってるでしょうか。 再現できるコードがないので確認してませんが、なんとなくこの+1が あやしいような気がします。どうもはみ出しそうに思えるのですが。 Fri Jun 11 15:21:21 1999 Yukihiro Matsumoto * gc.c (rb_gc_mark_locations): add safety margin 1. retrieving revision 1.1.1.3.2.8 retrieving revision 1.1.1.3.2.9 diff -u -2 -p -r1.1.1.3.2.8 -r1.1.1.3.2.9 --- gc.c 11 Jun 1999 06:29:53 -0000 1.1.1.3.2.8 +++ gc.c 24 Jun 1999 04:23:54 -0000 1.1.1.3.2.9 @@ -349,5 +349,5 @@ rb_gc_mark_locations(start, end) end = tmp; } - n = end - start; + n = end - start + 1; mark_locations_array(start,n); } -- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦