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