You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by yo...@apache.org on 2006/12/25 14:31:08 UTC
svn commit: r490148 - in /tomcat/container/tc5.5.x:
catalina/src/share/org/apache/catalina/servlets/DefaultServlet.java
webapps/docs/changelog.xml
Author: yoavs
Date: Mon Dec 25 05:31:07 2006
New Revision: 490148
URL: http://svn.apache.org/viewvc?view=rev&rev=490148
Log:
Bugzilla 40326: don't use File#deleteOnExit in DefaultServlet.
Modified:
tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/servlets/DefaultServlet.java
tomcat/container/tc5.5.x/webapps/docs/changelog.xml
Modified: tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/servlets/DefaultServlet.java
URL: http://svn.apache.org/viewvc/tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/servlets/DefaultServlet.java?view=diff&rev=490148&r1=490147&r2=490148
==============================================================================
--- tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/servlets/DefaultServlet.java (original)
+++ tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/servlets/DefaultServlet.java Mon Dec 25 05:31:07 2006
@@ -459,6 +459,15 @@
result = false;
}
+ // Bugzilla 40326: at this point content file should be safe to delete
+ // as it's no longer referenced. Let's not rely on deleteOnExit because
+ // it's a memory leak, as noted in this Bugzilla issue.
+ try {
+ contentFile.delete();
+ } catch (Exception e) {
+ log("DefaultServlet.doPut: couldn't delete temporary file: " + e.getMessage());
+ }
+
if (result) {
if (exists) {
resp.setStatus(HttpServletResponse.SC_NO_CONTENT);
@@ -489,10 +498,7 @@
// Convert all '/' characters to '.' in resourcePath
String convertedResourcePath = path.replace('/', '.');
File contentFile = new File(tempDir, convertedResourcePath);
- if (contentFile.createNewFile()) {
- // Clean up contentFile when Tomcat is terminated
- contentFile.deleteOnExit();
- }
+ contentFile.createNewFile();
RandomAccessFile randAccessContentFile =
new RandomAccessFile(contentFile, "rw");
@@ -503,6 +509,7 @@
if (obj instanceof Resource)
oldResource = (Resource) obj;
} catch (NamingException e) {
+ log("DefaultServlet.executePartialPut: couldn't find resource at " + path);
}
// Copy data in oldRevisionContent to contentFile
Modified: tomcat/container/tc5.5.x/webapps/docs/changelog.xml
URL: http://svn.apache.org/viewvc/tomcat/container/tc5.5.x/webapps/docs/changelog.xml?view=diff&rev=490148&r1=490147&r2=490148
==============================================================================
--- tomcat/container/tc5.5.x/webapps/docs/changelog.xml (original)
+++ tomcat/container/tc5.5.x/webapps/docs/changelog.xml Mon Dec 25 05:31:07 2006
@@ -168,6 +168,10 @@
<bug>39476</bug>: add xml declaration to most build.xml files, as suggested by
Gregory S. Hoerner Sr. (yoavs)
</update>
+ <fix>
+ <bug>40326</bug>: : stop using File#deleteOnExit in DefaultServlet to avoid
+ JVM memory leak, as suggested by quartz. (yoavs)
+ </fix>
</changelog>
</subsection>
<subsection name="Coyote">
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org