e$B1sF#$G$9!#e(B
e$B0J2<$N$h$&$K$9$k$He(B SEGV e$B$7$^$9!#e(B
$ cat race.rb
f = proc {|s| /#{ sleep 1; s }/o }
[ Thread.new { f.call(“foo”); nil },
Thread.new { sleep 0.5; f.call(“bar”); nil },
].each {|t| t.join }
GC.start
p f.call
$ ./ruby race.rb
race.rb:6: [BUG] Segmentation fault
ruby 1.9.2dev (2009-11-24 trunk 25908) [i686-linux]
– control frame ----------
c:0004 p:---- s:0011 b:0011 l:000010 d:000010 CFUNC
c:0003 p:0083 s:0007 b:0007 l:001d8c d:0022e8 EVAL race.rb:6
c:0002 p:---- s:0004 b:0004 l:000003 d:000003 FINISH
c:0001 p:0000 s:0002 b:0002 l:001d8c d:001d8c TOP
race.rb:6:in <main>' race.rb:6:in
p’
e$B%;%0%a%s%F!<%7%g%s0cH?$G$9e(B
onceinlinecache e$B$rDL$C$F$+$ie(B setinlinecache e$B$KCe$/A0$^$G$N4Ve(B
(= /#{ sleep 1; s }/o e$B$NI>2A$,;O$^$C$F$+$i=*$o$k$^$G$N4Ve(B) e$B$Ke(B
e$BJ#?t$N%9%l%C%I$,FMF~$9$k$H!"%$%s%i%$%s%-%c%C%7%e$N%"%/%;%9$,e(B
race condition e$B$K$J$C$F$$$FE,@Z$K%^!<%/$5$l$J$/$J$k$h$&$G$9!#e(B
e$B2r7hJ}K!$H$7$F$O!“Ev3:HO0O$,%/%j%F%#%+%k%;%/%7%g%s$K$J$k$h$&e(B
e$BF14|$r9T$&$+!”$^$?$O2?$+$r$9$kI,MW$,$"$k$H;W$$$^$9!#e(B
once e$B%U%i%0$N$"$k@55,I=8=$rJ#?t%9%l%C%I$GF1;~$KI>2A$7$?>l9g$Ne(B
e$B0UL#$O$I$&$J$k$G$7$g$&$+!#e(B