Kernel#` is blocked with Ruby/GLib2 on Intel Mac

e$B?\F#$G$9!#e(B

1.8.6-p110e$B$G$b:F8=$9$k$+$I$&$+$O$o$+$i$J$$$N$G$9$,!"!J$?$V$s!Ke(B
Intel Mace$B>e$Ge(Brequire
'glib2’e$B$7$?>uBV$Ge(BKernel#`e$B$r;H$&$H%V%m%Ce(B
e$B%/$9$k$_$?$$$G$9!#e(B

require ‘glib2’
date

http://www.cozmixng.org/~w3ml/index.rb/rabbit-shockers/msg/406

e$B%a!<%kK\J8$,e(BUTF-8e$B$@$C$?$N$GJ8;z2=$1$7$F$$$^$9!#e(B

e$B<jF0$G%V%i%&%6$N%(%s%3!<%G%#%s%0$re(BUTF-8e$B$K$7$F$/$@$5$$!#e(B

e$B$G!"860x$Oe(Bproc_exec_v()e$B$NCf$Ne(B

rb_thread_cancel_timer();

e$B$i$7$$$G$9!#e(B
http://www.cozmixng.org/~w3ml/index.rb/rabbit-shockers/msg/411

e$B$G!“$3$3$i$X$s$,4X78$,$”$k$_$?$$$G$9!#e(B
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-core/10580
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/30581

e$B?\F#$G$9!#e(B

e$BJdB-$G$9!#e(B

e$B$G!“$3$3$i$X$s$,4X78$,$”$k$_$?$$$G$9!#e(B
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-core/10580
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/30581

e$B$3$Ne(Brb_thread_cancel_timer()e$B$N=$@5$Oe(Bruby_1_8e$B$K$OF~$C$F$$$J$/e(B
e$B$Fe(Bruby_1_8_6e$B$K$@$1F~$C$F$$$^$9!#e(B

é ˆè—¤ã§ã™ã€‚

さらに補足です。

メール本文がUTF-8だったので文字化けしています。

で、ここらへんが関係があるみたいです。
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-core/10580
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/30581

このrb_thread_cancel_timer()の修正はruby_1_8には入っていなく
てruby_1_8_6にだけ入っています。

åŽŸå› ã¯ã“ã‚“ãªæ„Ÿã˜ã‚‰ã—ã„ã§ã™ã€‚

親でtimer thread 起動→fork→exec

という流れなんですが、fork した後も timer_thread のIDとかを持った変数は

そのまま引き継がれてるけど、fork した後にはそのthreadは存在しない。
ありもしないthreadに対して、pthread_join()してしまうわけです。
å¤§æŠµã®å ´åˆã¯ã‚¨ãƒ©ãƒ¼ã«ãªã‚‹ã‚“ã ã‚ã†ã‘ã©ã€ã‚ã‚‹çŠ¶æ³ã§ã¯ãŸã¾ãŸã¾å‘¼ã³å‡ºã—ãŒ
成功して、ありもしないthreadを待ち続けて、帰って来なくなる・・・。

http://www.cozmixng.org/~w3ml/index.rb/rabbit-shockers/msg/414

で、こんなので解決するらしいです。

ã“ã‚“ãªé–¢æ•°ã‚’è¿½åŠ ã—ã¦ã€

     pthread_create(&time_thread, 0, thread_timer, 0);

の前に、

     pthread_atfork(NULL, NULL, clear_time_thread);

ã‚’è¿½åŠ ã—ãŸã‚‰ã€å‹•ãã‚ˆã†ã«ãªã‚Šã¾ã—ãŸã€‚

http://www.cozmixng.org/~w3ml/index.rb/rabbit-shockers/msg/414

ショッカーは優秀だ。

e$B?\F#$G$9!#e(B

In [email protected]
“[ruby-dev:31838] Re: Kernel#` is blocked with Ruby/GLib2 on Intel
Mac” on Mon, 24 Sep 2007 14:39:03 +0900,
Urabe S. [email protected] wrote:

1.8.6-p110e$B$G$b:F8=$9$k$+$I$&$+$O$o$+$i$J$$$N$G$9$,!"!J$?$V$s!Ke(B
Intel Mace$B>e$Ge(Brequire 'glib2’e$B$7$?>uBV$Ge(BKernel#`e$B$r;H$&$H%V%m%Ce(B
e$B%/$9$k$_$?$$$G$9!#e(B

e$BD>$7$?$O$:$J$N$Ge(Bp110e$B$G$O:F8=$7$J$$$H?.$8$?$$$G$9!#e(B

e$B$^$C$?$/F1$8JQ99$,e(Bp101e$B$GF~$C$F$$$k$N$r3NG’$7$^$7$?!#e(B
e$B$J$N$G!"$?$V$sBg>fIW$=$&$G$9$M!#e(B

e$B$*A{$,$;$7$^$7$?!#e(B

e$BKNIt$G$9!#$J$s$+$9$G$K2r7h$7$F$k$C$]$$$G$9$,e(B

Kouhei S. wrote:

e$B?\F#$G$9!#e(B

1.8.6-p110e$B$G$b:F8=$9$k$+$I$&$+$O$o$+$i$J$$$N$G$9$,!"!J$?$V$s!Ke(B
Intel Mace$B>e$Ge(Brequire 'glib2’e$B$7$?>uBV$Ge(BKernel#`e$B$r;H$&$H%V%m%Ce(B
e$B%/$9$k$_$?$$$G$9!#e(B

e$BD>$7$?$O$:$J$N$Ge(Bp110e$B$G$O:F8=$7$J$$$H?.$8$?$$$G$9!#e(B

ruby_1_8e$B$KF~$C$F$J$$$N$O$b$C$H$^$7$J=$@5$,$"$k$O$:$@$H;W$$9~$s$G$$$k$+$ie(B