You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by mg...@apache.org on 2012/01/25 15:01:41 UTC

git commit: WICKET-4359 Package resources leak file handles

Updated Branches:
  refs/heads/master dffeb3065 -> 285beae65


WICKET-4359
Package resources leak file handles


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/285beae6
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/285beae6
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/285beae6

Branch: refs/heads/master
Commit: 285beae65a6e75223636751ed8f2782aee732338
Parents: dffeb30
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Wed Jan 25 16:01:18 2012 +0200
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Wed Jan 25 16:01:18 2012 +0200

----------------------------------------------------------------------
 .../wicket/request/resource/PackageResource.java   |   19 ++++++++------
 .../wicket/request/resource/ResourceReference.java |    2 +-
 .../request/resource/ResourceStreamResource.java   |    9 +-----
 .../version/MessageDigestResourceVersion.java      |    2 +-
 .../wicket/util/resource/UrlResourceStream.java    |    7 ++++-
 .../apache/wicket/devutils/debugbar/DebugBar.java  |    1 -
 .../org/apache/wicket/util/io/Connections.java     |   10 ++++++++
 .../wicket/util/resource/IResourceStream.java      |    3 +-
 8 files changed, 31 insertions(+), 22 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/285beae6/wicket-core/src/main/java/org/apache/wicket/request/resource/PackageResource.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/request/resource/PackageResource.java b/wicket-core/src/main/java/org/apache/wicket/request/resource/PackageResource.java
index b55b405..bf81f14 100644
--- a/wicket-core/src/main/java/org/apache/wicket/request/resource/PackageResource.java
+++ b/wicket-core/src/main/java/org/apache/wicket/request/resource/PackageResource.java
@@ -273,14 +273,7 @@ public class PackageResource extends AbstractResource implements IStaticCacheabl
 				// read resource data
 				final byte[] bytes;
 
-				try
-				{
-					bytes = IOUtils.toByteArray(resourceStream.getInputStream());
-				}
-				finally
-				{
-					resourceStream.close();
-				}
+				bytes = IOUtils.toByteArray(resourceStream.getInputStream());
 
 				final byte[] processed = processResponse(attributes, bytes);
 
@@ -307,6 +300,16 @@ public class PackageResource extends AbstractResource implements IStaticCacheabl
 				log.debug(e.getMessage(), e);
 				return sendResourceError(resourceResponse, 500, "Unable to open resource stream");
 			}
+			finally
+			{
+				try {
+					resourceStream.close();
+				}
+				catch (IOException e)
+				{
+					log.warn("Unable to close the resource stream", e);
+				}
+			}
 		}
 
 		return resourceResponse;

http://git-wip-us.apache.org/repos/asf/wicket/blob/285beae6/wicket-core/src/main/java/org/apache/wicket/request/resource/ResourceReference.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/request/resource/ResourceReference.java b/wicket-core/src/main/java/org/apache/wicket/request/resource/ResourceReference.java
index be47e7e..49c354d 100644
--- a/wicket-core/src/main/java/org/apache/wicket/request/resource/ResourceReference.java
+++ b/wicket-core/src/main/java/org/apache/wicket/request/resource/ResourceReference.java
@@ -490,7 +490,7 @@ public abstract class ResourceReference implements Serializable
 	}
 
 	/**
-	 * @return the resoureces this ResourceReference depends on.
+	 * @return the resources this ResourceReference depends on.
 	 */
 	public Iterable<? extends HeaderItem> getDependencies()
 	{

http://git-wip-us.apache.org/repos/asf/wicket/blob/285beae6/wicket-core/src/main/java/org/apache/wicket/request/resource/ResourceStreamResource.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/request/resource/ResourceStreamResource.java b/wicket-core/src/main/java/org/apache/wicket/request/resource/ResourceStreamResource.java
index 9d24d5b..7600aa8 100644
--- a/wicket-core/src/main/java/org/apache/wicket/request/resource/ResourceStreamResource.java
+++ b/wicket-core/src/main/java/org/apache/wicket/request/resource/ResourceStreamResource.java
@@ -46,7 +46,6 @@ public class ResourceStreamResource extends AbstractResource
 	private String fileName;
 	private ContentDisposition contentDisposition = ContentDisposition.INLINE;
 	private String textEncoding;
-	private String mimeType;
 
 	private Duration cacheDuration;
 
@@ -145,15 +144,11 @@ public class ResourceStreamResource extends AbstractResource
 			}
 			data.setFileName(fileName);
 
-			final String contentType;
-			if (fileName != null && Application.exists())
+			String contentType = stream.getContentType();
+			if (contentType == null && fileName != null && Application.exists())
 			{
 				contentType = Application.get().getMimeType(fileName);
 			}
-			else
-			{
-				contentType = stream.getContentType();
-			}
 			data.setContentType(contentType);
 			data.setTextEncoding(textEncoding);
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/285beae6/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/version/MessageDigestResourceVersion.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/version/MessageDigestResourceVersion.java b/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/version/MessageDigestResourceVersion.java
index b30eb8a..a320fd6 100644
--- a/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/version/MessageDigestResourceVersion.java
+++ b/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/version/MessageDigestResourceVersion.java
@@ -138,7 +138,7 @@ public class MessageDigestResourceVersion implements IResourceVersion
 			}
 			finally
 			{
-				IOUtils.close(inputStream);
+				IOUtils.close(stream);
 			}
 		}
 		catch (IOException e)

http://git-wip-us.apache.org/repos/asf/wicket/blob/285beae6/wicket-core/src/main/java/org/apache/wicket/util/resource/UrlResourceStream.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/util/resource/UrlResourceStream.java b/wicket-core/src/main/java/org/apache/wicket/util/resource/UrlResourceStream.java
index 10d10e4..a3904bf 100644
--- a/wicket-core/src/main/java/org/apache/wicket/util/resource/UrlResourceStream.java
+++ b/wicket-core/src/main/java/org/apache/wicket/util/resource/UrlResourceStream.java
@@ -230,8 +230,11 @@ public class UrlResourceStream extends AbstractResourceStream
 		if (data != null)
 		{
 			URLConnection connection = url.openConnection();
-			data.contentLength = connection.getContentLength();
-			Connections.close(connection);
+			try {
+				data.contentLength = connection.getContentLength();
+			} finally {
+				Connections.close(connection);
+			}
 		}
 	}
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/285beae6/wicket-devutils/src/main/java/org/apache/wicket/devutils/debugbar/DebugBar.java
----------------------------------------------------------------------
diff --git a/wicket-devutils/src/main/java/org/apache/wicket/devutils/debugbar/DebugBar.java b/wicket-devutils/src/main/java/org/apache/wicket/devutils/debugbar/DebugBar.java
index 132b65e..a941ddb 100644
--- a/wicket-devutils/src/main/java/org/apache/wicket/devutils/debugbar/DebugBar.java
+++ b/wicket-devutils/src/main/java/org/apache/wicket/devutils/debugbar/DebugBar.java
@@ -132,7 +132,6 @@ public class DebugBar extends DevUtilsPanel
 	 * Register your own custom contributor that will be part of the debug bar. You must have the
 	 * context of an application for this thread at the time of calling this method.
 	 * 
-	 * @param application
 	 * @param contrib
 	 *            custom contributor - can not be null
 	 */

http://git-wip-us.apache.org/repos/asf/wicket/blob/285beae6/wicket-util/src/main/java/org/apache/wicket/util/io/Connections.java
----------------------------------------------------------------------
diff --git a/wicket-util/src/main/java/org/apache/wicket/util/io/Connections.java b/wicket-util/src/main/java/org/apache/wicket/util/io/Connections.java
index 2b7438e..5336af6 100644
--- a/wicket-util/src/main/java/org/apache/wicket/util/io/Connections.java
+++ b/wicket-util/src/main/java/org/apache/wicket/util/io/Connections.java
@@ -124,6 +124,16 @@ public class Connections
 			return;
 		}
 
+		String protocol = connection.getURL().getProtocol();
+		if ("file".equals(protocol)) // XXX what about JarUrlConnection ?!
+		{
+			// Close FileUrlConnection's input stream because
+			// otherwise it leaks open file handles. See WICKET-4359.
+			// Most other connection types should not call getInputStream() here,
+			// especially remote connections.
+			connection.getInputStream().close();
+		}
+
 		if (connection instanceof HttpURLConnection)
 		{
 			((HttpURLConnection)connection).disconnect();

http://git-wip-us.apache.org/repos/asf/wicket/blob/285beae6/wicket-util/src/main/java/org/apache/wicket/util/resource/IResourceStream.java
----------------------------------------------------------------------
diff --git a/wicket-util/src/main/java/org/apache/wicket/util/resource/IResourceStream.java b/wicket-util/src/main/java/org/apache/wicket/util/resource/IResourceStream.java
index da3768d..74bfc29 100644
--- a/wicket-util/src/main/java/org/apache/wicket/util/resource/IResourceStream.java
+++ b/wicket-util/src/main/java/org/apache/wicket/util/resource/IResourceStream.java
@@ -44,8 +44,7 @@ public interface IResourceStream extends IModifiable, IClusterable, Closeable
 	 * Gets the mime type of this resource
 	 * 
 	 * @return The mime type of this resource, such as "image/jpeg" or "text/html". Return null to
-	 *         let {@link ResourceStreamRequestHandler} handle the Content-Type automatically
-	 * @see WebResponse#detectContentType(org.apache.wicket.RequestCycle, String)
+	 *         let ResourceStreamRequestHandler handle the Content-Type automatically
 	 */
 	String getContentType();