UNIXSocket.open leaks file descriptors on error
-----------------------------------------------

                 Key: JRUBY-4511
                 URL: http://jira.codehaus.org/browse/JRUBY-4511
             Project: JRuby
          Issue Type: Bug
          Components: Extensions
    Affects Versions: JRuby 1.4
            Reporter: Charles Oliver Nutter
             Fix For: JRuby 1.5


Reported via email by Masayuki Onjo:

{noformat}
ambda% uname -a
Linux lambda 2.6.31-gentoo-r6 #2 SMP Mon Jan 11 22:10:52 JST 2010 i686 Intel(R) 
Core(TM)2 Duo CPU T7300 @ 2.00GHz GenuineIntel GNU/Linux
lambda% jruby --version
jruby 1.5.0.dev (ruby 1.8.7 patchlevel 174) (2010-01-21 d1da75b) (Java 
HotSpot(TM) Client VM 1.6.0_17) [i386-java]
lambda% cat ../bug.rb
require 'socket'

def show_fd(msg)
   GC.start
   size = Dir.entries("/proc/#{$$}/fd/").size
   puts "#{msg}: #{size}"
end

show_fd("Before")
10.times { |x|
   begin
     UNIXSocket.open(nil)
   rescue => e
     p e
   end
}
show_fd("After")
lambda% ruby --version
ruby 1.9.2dev (2009-11-02 trunk 25630) [i686-linux]
lambda% ruby ../bug.rb
Before: 6
#<TypeError: can't convert nil into String>
#<TypeError: can't convert nil into String>
#<TypeError: can't convert nil into String>
#<TypeError: can't convert nil into String>
#<TypeError: can't convert nil into String>
#<TypeError: can't convert nil into String>
#<TypeError: can't convert nil into String>
#<TypeError: can't convert nil into String>
#<TypeError: can't convert nil into String>
#<TypeError: can't convert nil into String>
After: 6
lambda% jruby ../bug.rb
Before: 13
#<TypeError: can't convert nil into String>
#<TypeError: can't convert nil into String>
#<TypeError: can't convert nil into String>
#<TypeError: can't convert nil into String>
#<TypeError: can't convert nil into String>
#<TypeError: can't convert nil into String>
#<TypeError: can't convert nil into String>
#<TypeError: can't convert nil into String>
#<TypeError: can't convert nil into String>
#<TypeError: can't convert nil into String>
After: 23
lambda% git diff
diff --git a/src/org/jruby/ext/socket/RubyUNIXSocket.java 
b/src/org/jruby/ext/socket/RubyUNIXSocket.java
index 88fd718..40b4cc0 100644
--- a/src/org/jruby/ext/socket/RubyUNIXSocket.java
+++ b/src/org/jruby/ext/socket/RubyUNIXSocket.java
@@ -282,6 +282,10 @@ public class RubyUNIXSocket extends RubyBasicSocket {
    protected void init_unixsock(Ruby runtime, IRubyObject _path, boolean 
server) {
        int status;
        fd = -1;
+
+        ByteList path = _path.convertToString().getByteList();
+        fpath = path.toString();
+
        try {
            fd = INSTANCE.socket(AF_UNIX.value(), SOCK_STREAM.value(), 0);
        } catch (UnsatisfiedLinkError ule) { }
@@ -292,9 +296,6 @@ public class RubyUNIXSocket extends RubyBasicSocket {
        LibCSocket.sockaddr_un sockaddr = LibCSocket.sockaddr_un.newInstance();
        sockaddr.setFamily(AF_UNIX.value());

-        ByteList path = _path.convertToString().getByteList();
-        fpath = path.toString();
-
        if(sockaddr.path().length() <= path.getRealSize()) {
            throw runtime.newArgumentError("too long unix socket path (max: " + 
(sockaddr.path().length()-1) + "bytes)");
        }
lambda% ant
<<snip>>
lambda% jruby ../bug.rb
Before: 13
#<TypeError: can't convert nil into String>
#<TypeError: can't convert nil into String>
#<TypeError: can't convert nil into String>
#<TypeError: can't convert nil into String>
#<TypeError: can't convert nil into String>
#<TypeError: can't convert nil into String>
#<TypeError: can't convert nil into String>
#<TypeError: can't convert nil into String>
#<TypeError: can't convert nil into String>
#<TypeError: can't convert nil into String>
After: 13
lambda%
{noformat}

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://jira.codehaus.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

---------------------------------------------------------------------
To unsubscribe from this list, please visit:

    http://xircles.codehaus.org/manage_email


Reply via email to