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.

From-SVN: r70098
This commit is contained in:
Michael Koch 2003-08-02 06:31:02 +00:00 committed by Michael Koch
parent f53b62e15c
commit 15b68e0201
2 changed files with 48 additions and 10 deletions

View 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:

View 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,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;