From 15b68e0201298c5b54ec278f3ee223075d3b3134 Mon Sep 17 00:00:00 2001 From: Michael Koch Date: Sat, 2 Aug 2003 06:31:02 +0000 Subject: [PATCH] 2003-08-02 Michael Koch * 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 | 13 +++++++++++ libjava/java/net/URL.java | 45 ++++++++++++++++++++++++++++++--------- 2 files changed, 48 insertions(+), 10 deletions(-) diff --git a/libjava/ChangeLog b/libjava/ChangeLog index 71b863f2679..b497299a81f 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,16 @@ +2003-08-02 Michael Koch + + * 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 Fix for PR libgcj/11241: diff --git a/libjava/java/net/URL.java b/libjava/java/net/URL.java index fa6f660ffb7..2db8c4dd1cd 100644 --- a/libjava/java/net/URL.java +++ b/libjava/java/net/URL.java @@ -98,6 +98,14 @@ import java.util.StringTokenizer; *

* Please note that a protocol handler must be a subclass of * URLStreamHandler. + *

+ * 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 * @author Warren Levy @@ -149,12 +157,6 @@ public final class URL implements Serializable */ transient URLStreamHandler ph; - /** - * This a table where we cache protocol handlers to avoid the overhead - * of looking them up each time. - */ - private static Hashtable handlers = new Hashtable(); - /** * If an application installs its own protocol handler factory, this is * where we keep track of it. @@ -163,6 +165,26 @@ public final class URL implements Serializable 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 ph_cache = new Hashtable(); + + /** + * Whether or not to cache protocol handlers. + */ + private static boolean cache_handlers; + + 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 * arguments. @@ -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;