Forums » Ruby-dev » GC problem (?) in 1.8

GC problem (?) in 1.8
Posted by URABE Shyouhei (Guest)
on 20.06.2006 21:53
??で???

????????のautobuildで1.8?????????て???のに???きの????
??????と??ま???
現象と?ては??に?反?にな???況な???gdbで横???attach?てみ?と?
??ど?????GCに突???まま帰って?なくなって??????に??ま???

と?????私では?のく???まで??追?き??てな?ので????にどの???な
??報??要そ?で??????
Re: GC problem (?) in 1.8
Posted by Tanaka Akira (Guest)
on 21.06.2006 09:17
In article <449851E1.9030302@mput.dip.jp>,
  URABE Shyouhei <root@mput.dip.jp> writes:

> $B?tF|A0$+$iKNIt$N(Bautobuild$B$G(B1.8$B$,%?%$%`%"%&%H$7$F$$$k$N$K$*5$IU$-$NJ}$b$*(B
> $B$i$l$k$H;W$$$^$9!#(B
> $B8=>]$H$7$F$O40A4$KL5H?1~$K$J$k>u67$J$?$a!"(Bgdb$B$G2#$+$i(Battach$B$7$F$_$?$H$3(B
> $B$m!"$I$&$d$i(BGC$B$KFMF~$7$?$^$^5"$C$F$3$J$/$J$C$F$$$k$h$&$K8+$($^$9!#(B
>
> $B$H$j$"$($:;d$G$O$3$N$/$i$$$^$G$7$+DI$$$-$l$F$J$$$N$G$9$,!"B>$K$I$N$h$&$J(B
> $B>pJs$,I,MW$=$&$G$7$g$&$+(B?

http://www.rubyist.net/~kazu/chkbuild/powerpc-darwin/ruby-1.8-pth/summary.html
http://www.rubyist.net/~kazu/chkbuild/powerpc-darwin/ruby-1.8-pth/log/20060616T003305.txt.gz
$B$@$H!"(Btest_process.rb $B$,2x$7$$$N$G<j$rF~$l$F$_$^$7$?$,$I$&$G(B
$B$7$g$&$+!#(B
Re: GC problem (?) in 1.8
Posted by URABE Shyouhei (Guest)
on 21.06.2006 16:01
$BKNIt$G$9!#(B

Tanaka Akira wrote:
> test_process.rb $B$,2x$7$$$N$G<j$rF~$l$F$_$^$7$?$,$I$&$G$7$g$&$+!#(B
>   
0F0E$B$K$J$j$^$7$?!#(B

$B$b$&$A$g$C$HFM$C9~$s$GD4$Y$F$_$k$H!"(B

% ruby-1.8 -ve'
   f = Process::RLIMIT_NOFILE
   a = Process.getrlimit f
   p a
   Process.setrlimit f, 0, a[1]
   b = Process.getrlimit f
   p b
   Process.setrlimit f, a[0], a[1]'
ruby 1.8.5 (2006-06-21) [powerpc-darwin8.6.0]
[256, 9223372036854775807]
[0, 10240]
-e:8:in `setrlimit': Operation not permitted - setrlimit (Errno::EPERM)
        from -e:9
zsh: exit 1     ruby-1.8

$B$H$+$$$C$?>u67$,H/@8$7$F$$$k$h$&$G$9!#(Brlim_max$B$,Bg$-$9$.$G(BEPERM$B$K$J$C$F(B
$B$$$k$N$O$"$k0UL#@5>o$G$9$,!"(B
* $B:G=i$K<h$l$F$kCM$,$*$+$7$$(B
* 
$B$?$H$((BRLIMIT_NOFILE$B$,(B0$B$N$^$^$@$H$7$F$b(BGC$B$,;_$^$i$J$/$J$k$N$O$I$&$J$N$+(B
$B$3$N$"$?$j$KLdBj$,$"$k$h$&$J5$$,$7$^$9!#(B
Re: GC problem (?) in 1.8
Posted by Tanaka Akira (Guest)
on 21.06.2006 21:01
In article <449950A8.2070203@mput.dip.jp>,
  URABE Shyouhei <root@mput.dip.jp> writes:

> $B$H$+$$$C$?>u67$,H/@8$7$F$$$k$h$&$G$9!#(Brlim_max$B$,Bg$-$9$.$G(BEPERM$B$K$J$C$F(B
> $B$$$k$N$O$"$k0UL#@5>o$G$9$,!"(B
> * $B:G=i$K<h$l$F$kCM$,$*$+$7$$(B

$B$3$C$A$O$h$/$o$+$j$^$;$s!#(B

> * $B$?$H$((BRLIMIT_NOFILE$B$,(B0$B$N$^$^$@$H$7$F$b(BGC$B$,;_$^$i$J$/$J$k$N$O$I$&$J$N$+(B
> $B$3$N$"$?$j$KLdBj$,$"$k$h$&$J5$$,$7$^$9!#(B

$B$3$l$O(B sock_s_socketpair $B$,!"(BGC $B$rB3$1$F$$$1$P$-$C$H(B
descriptor $B$,6u$/!"$H?.$8$F$$$k$+$i$G$9$M!#(B

1$B2s$G$"$-$i$a$k$J$i$3$&$G$7$g$&$+!#(B

Index: ext/socket/socket.c
===================================================================
RCS file: /src/ruby/ext/socket/socket.c,v
retrieving revision 1.108.2.51
diff -u -p -r1.108.2.51 socket.c
--- ext/socket/socket.c	17 Jun 2006 15:53:27 -0000	1.108.2.51
+++ ext/socket/socket.c	21 Jun 2006 18:58:06 -0000
@@ -2304,15 +2304,17 @@ sock_s_socketpair(klass, domain, type, p
     VALUE klass, domain, type, protocol;
 {
 #if defined HAVE_SOCKETPAIR
-    int d, t, sp[2];
+    int d, t, p, sp[2];
+    int ret;

     setup_domain_and_type(domain, &d, type, &t);
-  again:
-    if (socketpair(d, t, NUM2INT(protocol), sp) < 0) {
-	if (errno == EMFILE || errno == ENFILE) {
-	    rb_gc();
-	    goto again;
-	}
+    p = NUM2INT(protocol);
+    ret = socketpair(d, t, p, sp);
+    if (ret < 0 && (errno == EMFILE || errno == ENFILE)) {
+        rb_gc();
+        ret = socketpair(d, t, p, sp);
+    }
+    if (ret < 0) {
 	rb_sys_fail("socketpair(2)");
     }
Re: GC problem (?) in 1.8
Posted by URABE Shyouhei (Guest)
on 22.06.2006 00:22
$BKNIt$G$9!#(B

Tanaka Akira wrote:
>> * $B:G=i$K<h$l$F$kCM$,$*$+$7$$(B
>>     
>
> $B$3$C$A$O$h$/$o$+$j$^$;$s!#(B
>   
$B$I$&$d$i$*$+$7$$$H;W$C$?$3$NCM$O(BRLIM_INFINITY$B$N$h$&$G$9!#$H$$$&$o$1$G!"(B
$BLdBjE@$O!V(Bsetrlimit(2)$B$K(B 
RLIMIT_INFINITY$B$rEO$9$H!"$J$s$+$X$s$JJQ49$,$+(B
$B$+$C$F$7$^$&$h$&$K8+$($k!W$H$$$&E@$G$9$M!#$Y$D$K(BRuby$B8GM-$NLdBj$H$$$&$o$1(B
$B$G$b$J$5$=$&$G$9!#0J2<$N$h$&$K(Bpython$B$K$bF1MM$NLdBj$,$"$k$3$H$,4QB,$G$-$^$9!#(B

% python
Python 2.3.5 (#1, Aug 22 2005, 22:13:23)
[GCC 3.3 20030304 (Apple Computer, Inc. build 1809)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import resource
>>> f = resource.RLIMIT_NOFILE
>>> a = resource.getrlimit(f)
>>> print a
(256L, 9223372036854775807L)
>>> resource.setrlimit(f, (0, a[1]))
>>> b = resource.getrlimit(f)
>>> print b
(0L, 10240L)
>>> resource.setrlimit(f, a)
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
ValueError: not allowed to raise maximum limit
>>> ^D
%
Re: GC problem (?) in 1.8
Posted by Tanaka Akira (Guest)
on 23.06.2006 16:15
In article <4499C5D9.8090200@mput.dip.jp>,
  URABE Shyouhei <root@mput.dip.jp> writes:

> $B$I$&$d$i$*$+$7$$$H;W$C$?$3$NCM$O(BRLIM_INFINITY$B$N$h$&$G$9!#$H$$$&$o$1$G!"(B
> $BLdBjE@$O!V(Bsetrlimit(2)$B$K(B RLIMIT_INFINITY$B$rEO$9$H!"$J$s$+$X$s$JJQ49$,$+(B
> $B$+$C$F$7$^$&$h$&$K8+$($k!W$H$$$&E@$G$9$M!#$Y$D$K(BRuby$B8GM-$NLdBj$H$$$&$o$1(B
> $B$G$b$J$5$=$&$G$9!#0J2<$N$h$&$K(Bpython$B$K$bF1MM$NLdBj$,$"$k$3$H$,4QB,$G$-$^$9!#(B

$B$D$$(B OpenDarwin $B$N%=!<%9$rD/$a$F$7$^$C$?$H$3$m!"(B

src/xnu/bsd/kern/kern_resource.c $B$K(B

        case RLIMIT_NOFILE:
                /*
                * Only root can set the maxfiles limits, as it is 
systemwide resource
                */
                if ( is_suser() ) {
                        if (limp->rlim_cur > maxfiles)
                                limp->rlim_cur = maxfiles;
                        if (limp->rlim_max > maxfiles)
                                limp->rlim_max = maxfiles;
                }
                else {
                        if (limp->rlim_cur > maxfilesperproc)
                                limp->rlim_cur = maxfilesperproc;
                        if (limp->rlim_max > maxfilesperproc)
                                limp->rlim_max = maxfilesperproc;
                }
                break;

$B$H$$$&$h$&$J%3!<%I$,$"$j!"(Bmaxfilesperproc $B$G8!:w$9$k$H(B
http://lists.apple.com/archives/macos-x-server/2004/May/msg01103.html
http://discus-hamburg.cocolog-nifty.com/mac_de_oracle/2005/05/panther_de_orac_dc5e.html
$B$H$+$N(B sysctl -a $B$N7k2LCf$K(B
kern.maxfilesperproc = 10240
$B$H$$$&$N$,8+$i$l$^$9!#(B

>>>> f = resource.RLIMIT_NOFILE
>>>> a = resource.getrlimit(f)
>>>> print a
> (256L, 9223372036854775807L)
>>>> resource.setrlimit(f, (0, a[1]))
>>>> b = resource.getrlimit(f)
>>>> print b
> (0L, 10240L)

$B$3$3$N(B 10240 $B$H4X78$"$C$?$j$7$J$$$G$7$g$&$+!#(B