Author: rgoers
Date: Tue Nov  3 17:36:07 2009
New Revision: 832481

URL: http://svn.apache.org/viewvc?rev=832481&view=rev
Log:
Apply patch for VFS-289 provided by Kirill Safonov

Modified:
    
commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/provider/ftp/FtpFileObject.java
    commons/proper/vfs/trunk/xdocs/changes.xml

Modified: 
commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/provider/ftp/FtpFileObject.java
URL: 
http://svn.apache.org/viewvc/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/provider/ftp/FtpFileObject.java?rev=832481&r1=832480&r2=832481&view=diff
==============================================================================
--- 
commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/provider/ftp/FtpFileObject.java
 (original)
+++ 
commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs/provider/ftp/FtpFileObject.java
 Tue Nov  3 17:36:07 2009
@@ -585,13 +585,19 @@
     protected InputStream doGetInputStream() throws Exception
     {
         final FtpClient client = ftpFs.getClient();
-        final InputStream instr = client.retrieveFileStream(relPath);
-        // VFS-210
-        if (instr == null)
-        {
-            throw new FileNotFoundException(getName().toString());
+        try {
+            final InputStream instr = client.retrieveFileStream(relPath);
+            // VFS-210
+            if (instr == null)
+            {
+                throw new FileNotFoundException(getName().toString());
+            }
+            return new FtpInputStream(client, instr);
+        }
+        catch (Exception e) {
+            ftpFs.putClient(client);
+            throw e;
         }
-        return new FtpInputStream(client, instr);
     }
 
     protected RandomAccessContent doGetRandomAccessContent(final 
RandomAccessMode mode) throws Exception
@@ -606,26 +612,32 @@
         throws Exception
     {
         final FtpClient client = ftpFs.getClient();
-        OutputStream out = null;
-        if (bAppend)
-        {
-            out = client.appendFileStream(relPath);
-        }
-        else
-        {
-            out = client.storeFileStream(relPath);
-        }
+        try {
+            OutputStream out = null;
+            if (bAppend)
+            {
+                out = client.appendFileStream(relPath);
+            }
+            else
+            {
+                out = client.storeFileStream(relPath);
+            }
 
-        if (out == null)
-        {
-            throw new 
FileSystemException("vfs.provider.ftp/output-error.debug", new Object[]
-                {
-                    this.getName(),
-                    client.getReplyString()
-                });
-        }
+            if (out == null)
+            {
+                throw new 
FileSystemException("vfs.provider.ftp/output-error.debug", new Object[]
+                    {
+                        this.getName(),
+                        client.getReplyString()
+                    });
+            }
 
-        return new FtpOutputStream(client, out);
+            return new FtpOutputStream(client, out);
+        }
+        catch (Exception e) {
+            ftpFs.putClient(client);
+            throw e;
+        }
     }
 
     String getRelPath()
@@ -636,16 +648,22 @@
     FtpInputStream getInputStream(long filePointer) throws IOException
     {
         final FtpClient client = ftpFs.getClient();
-        final InputStream instr = client.retrieveFileStream(relPath, 
filePointer);
-        if (instr == null)
-        {
-            throw new 
FileSystemException("vfs.provider.ftp/input-error.debug", new Object[]
-                {
-                    this.getName(),
-                    client.getReplyString()
-                });
+        try {
+            final InputStream instr = client.retrieveFileStream(relPath, 
filePointer);
+            if (instr == null)
+            {
+                throw new 
FileSystemException("vfs.provider.ftp/input-error.debug", new Object[]
+                    {
+                        this.getName(),
+                        client.getReplyString()
+                    });
+            }
+            return new FtpInputStream(client, instr);
+        }
+        catch (IOException e) {
+            ftpFs.putClient(client);
+            throw e;
         }
-        return new FtpInputStream(client, instr);
     }
 
     /**

Modified: commons/proper/vfs/trunk/xdocs/changes.xml
URL: 
http://svn.apache.org/viewvc/commons/proper/vfs/trunk/xdocs/changes.xml?rev=832481&r1=832480&r2=832481&view=diff
==============================================================================
--- commons/proper/vfs/trunk/xdocs/changes.xml (original)
+++ commons/proper/vfs/trunk/xdocs/changes.xml Tue Nov  3 17:36:07 2009
@@ -23,6 +23,9 @@
 
   <body>
     <release version="2.0" date="in SVN" description="">
+      <action dev="rgoers" type="fix" issue="VFS-289" due-to="Kirill Safonov">
+        FTP connection is not released If exception is thrown out of 
FtpFileObject.doGetOutputStream().
+      </action>
       <action dev="rgoers" type="fix" issue="VFS-286" due-to="Kirill Safonov">
         SftpFileObject.doListChildrenResolved() changes the working dir before 
doing ChannelSftp.ls() call.
         If ls() throws an exception, the current directory is not reset. All 
the subsequent operations that rely on the


Reply via email to