Bug #3262: can’t create fiber & SEGV in windows
http://redmine.ruby-lang.org/issues/show/3262
e$B5/I<<Te(B: masaya tarui
e$B%9%F!<%?%9e(B: Open, e$BM%@hEYe(B: Normal
e$B%+%F%4%je(B: core, Target version: 1.9.2
ruby -v: ruby 1.9.2dev (2010-05-09 trunk 27684) [i386-mswin32_90]
windowse$B$K$*$$$Fe(B fiber
e$B$,:n$l$J$/$J$C$Fe(BSEGVe$B$9$k;v$,$"$j$^$9!#e(B
[BUG] Segmentation fault
ruby 1.9.2dev (2010-05-09 trunk 27684) [i386-mswin32_90]
– control frame ----------
c:0001 p:---- s:0001 b:-001 l:000000 d:000000 ------
e$B:F8=4D6-$O:n$l$F$^$;$s$,!"$3$A$i$G$Oe(Bnmake
test-alle$B$7$?$H$-$Ne(Btest_many_fiberse$B$GI,$:Mn$A$^$7$?!#e(B
#e$BC1BN$Ge(Btest_fiber.rbe$B$rF0$+$7$F$bMn$A$J$$!#!#!#e(B
e$B:n@.$K<:GT$9$k>l9g$N%(%i!<$rD4$Y$k$H!V$3$N%3%^%s%I$r<B9T$9$k$N$K==J,$J5-210h$,$"$j$^$;$s!#!W$H8@$o$l$F$$$^$9!#e(B
e$B$^$?e(BSEGVe$B$,H/@8$9$k$N$O@8@.$K<:GT$7$?>l9g$K%A%'%C%/$,F~$C$F$*$i$:L58z$J%O%s%I%k$X@Z$jBX$($h$&$H$9$k$+$i$G$9!#e(B
e$B!Je(B SwitchToFiber(0); e$B$r<B9T$7$FMn$A$k!#!Ke(B
e$B$3$l$i$r2r>C$9$k$?$a$K0J2<$N%Q%C%A$rEv$F$?$H$3$m:#$OF0$$$F$$$^$9$,!“e(BFibere$B$NM}O@E*$J@)8B?t$KBP$7$F<B:]$K@8@.$G$-$F$k?t$,9g$C$F$k$N$+$o$+$i$:!”:,K\E*$J2r7h$K$J$C$F$k$N$+$o$+$j$^$;$s!#e(B
Index: cont.c
— cont.c (e$B%j%S%8%g%se(B 27685)
+++ cont.c (e$B:n6H%3%T!<e(B)
@@ -548,6 +548,14 @@
#ifdef _WIN32
fib->fib_handle = CreateFiberEx(size - 1, size, 0, fiber_entry,
NULL);
- if(fib->fib_handle==NULL){
-
//try release unnecessary fibers & retry create
-
rb_gc();
-
fib->fib_handle = CreateFiberEx(size - 1, size, 0, fiber_entry,
NULL);
-
if(fib->fib_handle==NULL){
-
rb_raise(rb_eFiberError, "can't create fiber");
-
}
- }
#else /* not WIN32 */
ucontext_t *context = &fib->context;
e$B$A$J$_$K<j85$Ge(Bnmake
test-alle$B$GAv$i$;$?>l9g$G$Oe(B1300e$B8D$+$ie(B1600e$B8D<e@8@.$9$k$?$S$KNN0h$,B-$j$J$$$H8@$o$l$F$k$h$&$J$N$G$9$,!"e(B
e$B$3$l$O2?$,1F6A$7$F$-$^$k$s$G$7$g$&$+!)e(B