[Bug #3262] can't create fiber & SEGV in windows

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

e$B%A%1%C%He(B #3262 e$B$,99?7$5$l$^$7$?!#e(B (by Nobuyoshi N.)

e$B%9%F!<%?%9e(B Opene$B$+$ie(BClosede$B$KJQ99e(B
e$B?JD=e(B % 0e$B$+$ie(B100e$B$KJQ99e(B

This issue was solved with changeset r27701.
masaya, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.


http://redmine.ruby-lang.org/issues/show/3262