[Bug: 1.9] lazy timer thraed creation

e$B!!$5$5$@$G$9!%e(B

e$B!!8=:_!$e(B1.9 e$B$G$Oe(B timer thread
e$B$H$$$&$b$N$r5/F0;~$K:n$C$F!$0J2<$NMQESe(B
e$B$KMxMQ$7$F$$$^$9!%e(B

a) e$B%9%l%C%I%9%$%C%A$N7@5!e(B
b) signal e$B$N=8Lse(B
c) sampling profiling

e$B!!e(B(a) e$B$Oe(B SIGVTALRM e$B$NBe$o$j$K!$e(Bselect e$B$Ge(B polling
e$B$7$F!$Dj4|E*$Ke(B ruby
threads e$B$KBP$7$F%9%l%C%I@Z$jBX$($rB%$7$^$9!%e(B

e$B!!e(B(b) e$B$O!$0lEYe(B signal e$B$re(B timer thread
e$B$K=8Ls$7$F!$$=$N8ee(B ruby thread
e$B$Ke(B signal e$B$N>pJs$rEO$9$h$&$K<BAu$7$F$$$^$9!%e(B

e$B!!e(B© e$B$O!$$"$^$j3hMQ$5$l$F$$$^$;$s$,!$e(Bsampling profiler
e$B$H$7$FMxMQ$9e(B
e$B$k$3$H$,$G$-$^$9!%:#8e$N3HD%MQ$G$9!%e(B

e$B!!$?$@!$:G6a$Ne(BFreeBSDe$B$de(BNetBSDe$B$O!$0lEYe(B pthread
e$B$r:n$k$H!$8e;OKv$r$7$Fe(B
e$B$be(B fork e$B8e!$e(Bpthread e$B$r:n$m$&$H$9$k$H;I$5$k$N$G!$I,$:e(B
timer thread e$B$re(B
e$B:n$ke(B 1.9 e$B$G$Oe(B fork e$B$,=PMh$^$;$s!%$=$3$G!$:G=i$Ke(B
Thread.new e$B$9$k$^e(B
e$B$G!$$D$^$j!$%^%k%A%9%l%C%I<B9T$r9T$&$^$Ge(B timer thread
e$B$NCY1d$rCY$i$;e(B
e$B$k$h$&$JDs0F$r<u$1$F$$$^$9!%e(B

e$B!!e(B(b) e$B$K4X$7$F$O<BAu$K$D$$$F%1%"$,I,MW$G!J$3$l$^$G!$e(Bruby
thread e$B$Ge(B
signal e$B$r<u$1$k?4G[$r$9$kI,MW$,$J$+$C$?!K!$e(B©
e$B$K$D$$$F$O$"$-$i$a$Je(B
e$B$1$l$P$J$j$^$;$s$,!$e(BFreeBSD, NetBSD e$B$J$I$N9-$/MxMQ$5$l$F$$$ke(B
OS e$B$Ge(B
fork e$B$,F0$+$J$$$N$O$^$:$+$m$&!$$H$$$&0U8+$G$9!%e(B

e$B!!e(Bfork
e$B$r$3$l0J>e;H$&$J!$$H$$$&0U8+$b$"$k$+$H$O;W$$$^$9$,!$$3$NDs0Fe(B
e$B$K$D$$$F$OA08~$-$K8!F$$7$F$$$-$^$9!%e(B

e$B!!K:$l$J$$$h$&$Ke(B redmine e$B$KEPO?$7$F$*$-$^$9!%e(B

e$B!!$40U8+Jg=8Cf$G$9!%e(B

e$B%A%1%C%He(B #270 e$B$,99?7$5$l$^$7$?!#e(B (by Yui NARUSE)

e$B%9%F!<%?%9e(B Opene$B$+$ie(BClosede$B$KJQ99e(B
ruby -v ruby 1.8.8dev (2010-01-17 revision 26335) [i386-netbsdelf5.0.1]
e$B$K%;%C%He(B

e$BK\7o$G$9$,!“$^$:e(B FreeBSD 7.2 e$B$”$?$j!“e(BNetBSD 5.0
e$B$”$?$j$Ge(B OS e$BB&$KBP=h$,F~$j!"e(B
pthread e$B$r;H$C$?8e$Ge(B fork
e$B$7$F$b;I$5$i$J$$$h$&$K$J$C$?$h$&$G$9!#e(B
(e$BC/$+%3%_%C%H$NFCDj$h$m$7$/e(B)

e$B$^$?!“4XO”$9$ke(B #2603 r26371 e$B$+$iF@$i$l$?CN8+$rDI5-$9$k$H!“e(B
01:04 (unak) e$B:#F|$N$^$H$ae(B
01:05 (unak) NetBSDe$B$Ne(Bpthread_atfork()e$B$d$P$$e(B
01:05 (unak)
e$B$H$$$&$+!“e(Bpthread_atfork()e$B$NCf$Ge(Bpthread_create()e$B$7$A$c$$$1$J$$$s$@$m$&$M!#e(B
01:06 (unak) e$B$”$”!“$b$&0l8D$”$C$?!#e(B
01:07 (unak)
NetBSDe$B$@$He(Bfork()e$BA0$KM>J,$J%9%l%C%I$r;&$7$F$*$/$N$,5He(B… …

01:44 (unak) parent
handere$B$Ge(Bpthread_create()e$B$,8F$V$H;I$5$k$N$O$J$s$+JQ$J$N$G!"$3$l$Oe(BOSe$BB&$GBP1~$7$F$[$7$$$M!#e(B
e$B$H$$$&$3$H$K$J$k$h$&$G$9!#e(B

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

e$B$3$s$K$A$O!"$J$+$`$ie(B(e$B$&e(B)e$B$G$9!#e(B

In message “[ruby-dev:40127] Re: Bug #270 lazy timer thraed
creation”
on Jan.22,2010 08:54:15, [email protected] wrote:

e$BKM$NCN8+$Oe(B

pthread_atfork(0, 0, rb_thread_stop_timer); e$B$O%@%a$J;Re(B

e$B$K$D$-$k$h$&$J!#$3$N;R$,0UL#$,$“$k%W%i%C%H%U%)!<%`!”$"$k$s$@$m$&$+!&!&!&e(B

e$B$G$9$h$M!<!#e(B
e$B;R%W%m%;%9B&$G$Oe(Btimer threade$B$O;`$s$G$k$K7h$^$C$F$k$s$@$7e(B…

e$B$=$l$G$O!#e(B

01:04 (unak) e$B:#F|$N$^$H$ae(B
01:05 (unak) NetBSDe$B$Ne(Bpthread_atfork()e$B$d$P$$e(B
01:05 (unak) e$B$H$$$&$+!“e(Bpthread_atfork()e$B$NCf$Ge(Bpthread_create()e$B$7$A$c$$$1$J$$$s$@$m$&$M!#e(B
01:06 (unak) e$B$”$"!"$b$&0l8D$"$C$?!#e(B
01:07 (unak) NetBSDe$B$@$He(Bfork()e$BA0$KM>J,$J%9%l%C%I$r;&$7$F$*$/$N$,5He(B… … …
01:44 (unak) parent handere$B$Ge(Bpthread_create()e$B$,8F$V$H;I$5$k$N$O$J$s$+JQ$J$N$G!"$3$l$Oe(BOSe$BB&$GBP1~$7$F$[$7$$$M!#e(B
e$B$H$$$&$3$H$K$J$k$h$&$G$9!#e(B

e$BKM$NCN8+$Oe(B

pthread_atfork(0, 0, rb_thread_stop_timer); e$B$O%@%a$J;Re(B

e$B$K$D$-$k$h$&$J!#$3$N;R$,0UL#$,$"$k%W%i%C%H%U%)!<%`!"$"$k$s$@$m$&$+!&!&!&e(B