こんばんは、sheepman です。

終了した Fiber に callcc で再入すると segv します。

$ cat f.rb
Fiber.new do
  if callcc{|c| $k = c }
    p 1
  else
    p 3
  end
end.pass
p 2
$k.call

$ ruby-1.9 -v f.rb
ruby 1.9.0 (2007-06-01 patchlevel 0) [i686-linux]
1
2
3
SEGV recieved in SEGV handler

以下はバックトレースです。

(gdb) bt
#0  0x000007e0 in ?? ()
#1  0x080c042e in th_eval_body (th=0x8133eb0) at ../ruby/vm.c:1631
#2  0x080bb901 in invoke_block (th=0x8133eb0, block=0x8171d30, self=1076562140, argc=0,
    argv=0x8172010, magic=-83886223) at ../ruby/vm.c:799
#3  0x080bba8d in th_invoke_proc (th=0x8133eb0, proc=0x8171d30, self=1076562140, argc=0,
    argv=0x8172010) at ../ruby/vm.c:839
#4  0x080c644a in rb_fiber_start () at ../ruby/cont.c:433
#5  0x0805953c in ruby_exec_internal () at ../ruby/eval.c:212
#6  0x08059554 in ruby_exec () at ../ruby/eval.c:227
#7  0x0805958f in ruby_run () at ../ruby/eval.c:246
#8  0x08056dd4 in th_get_ruby_level_cfp (th=0x7e0, cfp=0x0) at ../ruby/main.c:47
#9  0x400dcc1f in __libc_start_main () from /lib/i686/libc.so.6

-- 
sheepman / TAMURA Takashi
sheepman / sheepman.sakura.ne.jp