2003-08-02 Michael Koch <konqueror@gmx.de>
authorMichael Koch <konqueror@gmx.de>
Sat, 2 Aug 2003 06:31:02 +0000 (06:31 +0000)
committerMichael Koch <mkoch@gcc.gnu.org>
Sat, 2 Aug 2003 06:31:02 +0000 (06:31 +0000)
* java/net/URL.java
(URL): Added paragraph about the
gnu.java.net.nocache_protocol_handlers property.
(ph_cache): Renamed from handlers to match classpath's implementation.
Reordered it with factory and serialVersionUID member variables.
(cache_handlers): New member variable.
(static): New static initializer to initialize cache_handlers from
gnu.java.net.nocache_protocol_handlers property.
(URL): Use ph_cache instead of handlers, reformatted some code to
match classpath's implementation.

From-SVN: r70098

libjava/ChangeLog
libjava/java/net/URL.java

index 71b863f2679926744c921c5efc7d68daab14ec92..b497299a81f45f211e6fd7ff67a0711a87a82f36 100644 (file)
@@ -1,3 +1,16 @@
+2003-08-02  Michael Koch  <konqueror@gmx.de>
+
+       * java/net/URL.java
+       (URL): Added paragraph about the
+       gnu.java.net.nocache_protocol_handlers property.
+       (ph_cache): Renamed from handlers to match classpath's implementation.
+       Reordered it with factory and serialVersionUID member variables.
+       (cache_handlers): New member variable.
+       (static): New static initializer to initialize cache_handlers from
+       gnu.java.net.nocache_protocol_handlers property.
+       (URL): Use ph_cache instead of handlers, reformatted some code to
+       match classpath's implementation.
+
 2003-08-01  Tom Tromey  <tromey@redhat.com>
 
        Fix for PR libgcj/11241:
index fa6f660ffb79779c4fe30b79d2653539c63c4517..2db8c4dd1cd89947a62bf46db51557aff624db82 100644 (file)
@@ -98,6 +98,14 @@ import java.util.StringTokenizer;
   * <p>
   * Please note that a protocol handler must be a subclass of
   * URLStreamHandler.
+  * <p>
+  * Normally, this class caches protocol handlers.  Once it finds a handler
+  * for a particular protocol, it never tries to look up a new handler
+  * again.  However, if the system property
+  * gnu.java.net.nocache_protocol_handlers is set, then this
+  * caching behavior is disabled.  This property is specific to this
+  * implementation.  Sun's JDK may or may not do protocol caching, but it
+  * almost certainly does not examine this property.
   *
   * @author Aaron M. Renn <arenn@urbanophile.com>
   * @author Warren Levy <warrenl@cygnus.com>
@@ -149,19 +157,33 @@ public final class URL implements Serializable
    */
   transient URLStreamHandler ph;
 
+  /**
+   * If an application installs its own protocol handler factory, this is
+   * where we keep track of it.
+   */
+  private static URLStreamHandlerFactory factory;
+
+  private static final long serialVersionUID = -7627629688361524110L;
+
   /**
    * This a table where we cache protocol handlers to avoid the overhead
    * of looking them up each time.
    */
-  private static Hashtable handlers = new Hashtable();
+  private static Hashtable ph_cache = new Hashtable();
 
   /**
-   * If an application installs its own protocol handler factory, this is
-   * where we keep track of it.
+   * Whether or not to cache protocol handlers.
    */
-  private static URLStreamHandlerFactory factory;
+  private static boolean cache_handlers;
 
-  private static final long serialVersionUID = -7627629688361524110L;
+  static
+    {
+      String s = System.getProperty("gnu.java.net.nocache_protocol_handlers");
+      if (s == null)
+        cache_handlers = true;
+      else
+        cache_handlers = false;
+    }
 
   /**
    * Constructs a URL and loads a protocol handler for the values passed as
@@ -732,12 +754,14 @@ public final class URL implements Serializable
     URLStreamHandler ph;
 
     // See if a handler has been cached for this protocol.
-    if ((ph = (URLStreamHandler) handlers.get(protocol)) != null)
+    if ((ph = (URLStreamHandler) ph_cache.get(protocol)) != null)
       return ph;
 
     // If a non-default factory has been set, use it to find the protocol.
     if (factory != null)
-      ph = factory.createURLStreamHandler(protocol);
+      {
+       ph = factory.createURLStreamHandler(protocol);
+      }
     else if (protocol.equals ("core"))
       {
        ph = new gnu.gcj.protocol.core.Handler ();
@@ -788,9 +812,10 @@ public final class URL implements Serializable
       }
 
     // Update the hashtable with the new protocol handler.
-    if (ph != null)
+    if (ph != null
+        && cache_handlers)
       if (ph instanceof URLStreamHandler)
-       handlers.put(protocol, ph);
+       ph_cache.put(protocol, ph);
       else
        ph = null;