about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2009-03-24 20:08:08 -0700
committerEric Wong <normalperson@yhbt.net>2009-03-24 22:10:26 -0700
commitb7880146d13c8ed837ffa92102f1a907dd0d21ee (patch)
tree73c315afe7768473156342bdac4da9bfba78d7e6
parent9ae7c33f4465d3d44b5ae31d9f454f89e5748fb3 (diff)
downloadmogilefs-client-b7880146d13c8ed837ffa92102f1a907dd0d21ee.tar.gz
This can potentially fix some file descriptor leaks (but there
may not be any leaks because of GC which can mysteriously close
file descriptors as I've discovered).

Better safe than sorry...
-rw-r--r--lib/mogilefs/util.rb7
1 files changed, 6 insertions, 1 deletions
diff --git a/lib/mogilefs/util.rb b/lib/mogilefs/util.rb
index 9ccd4f0..28c7d44 100644
--- a/lib/mogilefs/util.rb
+++ b/lib/mogilefs/util.rb
@@ -180,9 +180,14 @@ class Socket
       sock = mogilefs_new(host, port, timeout)
       syswrite_full(sock, request, timeout)
       timeout -= (Time.now - t0)
-      raise MogileFS::Timeout, 'socket read timeout' if timeout < 0
+      if timeout < 0
+        sock.close rescue nil
+        raise MogileFS::Timeout, 'socket read timeout'
+      end
       r = IO.select([sock], nil, nil, timeout)
       return sock if r && r[0]
+
+      sock.close rescue nil
       raise MogileFS::Timeout, 'socket read timeout'
     end