ant-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Xavier Hanin" <xavier.ha...@gmail.com>
Subject Re: svn commit: r448049 - /ant/core/trunk/src/main/org/apache/tools/ant/types/resources/URLResource.java
Date Wed, 20 Sep 2006 17:02:52 GMT
On 9/20/06, Matt Benson <gudnabrsam@yahoo.com> wrote:
>
> --- Antoine Levy-Lambert <antoine@gmx.de> wrote:
>
> > Hello Xavier,
> >
> > the patch is welcome, but I do not see the
> > attachment ? maybe it
> > comes from my email reader.
>
> Nor did I.  :)


This is weird, I see it in gmail... Is  it using some fancy thing to attach
files?
Anyway, here is the patch in plain text:
Index: src/main/org/apache/tools/ant/types/resources/URLResource.java
===================================================================
--- src/main/org/apache/tools/ant/types/resources/URLResource.java
(revision 448066)
+++ src/main/org/apache/tools/ant/types/resources/URLResource.java
(working copy)
@@ -22,6 +22,7 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.net.HttpURLConnection;
 import java.net.URL;
 import java.net.URLConnection;
 import java.net.MalformedURLException;
@@ -145,6 +146,28 @@
      * @return true if this resource exists.
      */
     public synchronized boolean isExists() {
+        return isExists(true);
+    }
+
+    /**
+     * Find out whether the URL exists, and close the connection
+     * opened to the URL if closeConnection is true.
+     *
+     * Note that this method does ensure that if:
+     * - the resource exists (if it returns true)
+     * - and if the current object is not a reference
+     * (isReference() returns false)
+     * - and if it was called with closeConnection to false,
+     *
+     * then the connection to the URL (stored in the conn
+     * private field) will be opened, and require to be closed
+     * by the caller.
+     *
+     * @param closeConnection true if the connection should be closed
+     * after the call, false if it should stay open.
+     * @return true if this resource exists.
+     */
+    private synchronized boolean isExists(boolean closeConnection) {
         if (isReference()) {
             return ((Resource) getCheckedRef()).isExists();
         }
@@ -156,9 +179,14 @@
             return true;
         } catch (IOException e) {
             return false;
+        } finally {
+            if (closeConnection) {
+                close();
+            }
         }
     }

+
     /**
      * Tells the modification time in milliseconds since 01.01.1970 .
      *
@@ -169,10 +197,12 @@
         if (isReference()) {
             return ((Resource) getCheckedRef()).getLastModified();
         }
-        if (!isExists()) {
+        if (!isExists(false)) {
             return 0L;
         }
         try {
+            // note that this call to connect() is not necessary:
+            // isExists returned true and isReference returned false
             connect();
             return conn.getLastModified();
         } catch (IOException e) {
@@ -177,6 +207,8 @@
             return conn.getLastModified();
         } catch (IOException e) {
             return 0L;
+        } finally {
+            close();
         }
     }

@@ -199,16 +231,18 @@
         if (isReference()) {
             return ((Resource) getCheckedRef()).getSize();
         }
-        if (!isExists()) {
+        if (!isExists(false)) {
             return 0L;
         }
         try {
+            // note that this call to connect() is not necessary:
+            // isExists returned true and isReference returned false
             connect();
-            long contentlength = conn.getContentLength();
-            close();
-            return contentlength;
+            return conn.getContentLength();
         } catch (IOException e) {
             return UNKNOWN_SIZE;
+        } finally {
+            close();
         }
     }

@@ -260,7 +294,7 @@
         try {
             return conn.getInputStream();
         } finally {
-            conn = null;
+            close();
         }
     }

@@ -280,7 +314,7 @@
         try {
             return conn.getOutputStream();
         } finally {
-            conn = null;
+            close();
         }
     }

@@ -304,7 +338,15 @@
         }
     }

-    private void close() {
+    /**
+     * Closes the URL connection if:
+     * - it is opened (i.e. the field conn is not null)
+     * - this type of URLConnection supports some sort of close mechanism
+     *
+     * This method ensures the field conn will be null after the call.
+     *
+     */
+    private synchronized void close() {
         if (conn != null) {
             try {
                 if (conn instanceof JarURLConnection) {
@@ -312,6 +354,8 @@
                     JarFile jf = juc.getJarFile();
                     jf.close();
                     jf = null;
+                } else if (conn instanceof HttpURLConnection) {
+                    ((HttpURLConnection) conn).disconnect();
                 }
             } catch (IOException exc) {

@@ -327,7 +371,7 @@
      */
     protected void finalize() throws Throwable {
         close();
-        conn = null;
+        conn = null; // Note: already done by close();
         super.finalize();
     }

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message