You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by re...@apache.org on 2001/07/14 08:51:40 UTC
cvs commit: jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/loader LocalStrings.properties WebappClassLoader.java WebappLoader.java
remm 01/07/13 23:51:40
Modified: catalina/src/share/org/apache/catalina/loader
LocalStrings.properties WebappClassLoader.java
WebappLoader.java
Log:
- Fix a race condition in the modified method, as reported by Jon Stevens.
One of the arrays could be could be bigger than the other by one elemnt.
- If there is an exception in modified, it is now logged and caught, instead of
killing the thread which tracks modifications.
Revision Changes Path
1.3 +1 -0 jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/loader/LocalStrings.properties
Index: LocalStrings.properties
===================================================================
RCS file: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/loader/LocalStrings.properties,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- LocalStrings.properties 2001/06/21 01:39:07 1.2
+++ LocalStrings.properties 2001/07/14 06:51:39 1.3
@@ -27,3 +27,4 @@
webappLoader.removeRepository=Removing repository {0}
webappLoader.starting=Starting this Loader
webappLoader.stopping=Stopping this Loader
+webappLoader.failModifiedCheck=Error tracking modifications
1.9 +22 -12 jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/loader/WebappClassLoader.java
Index: WebappClassLoader.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/loader/WebappClassLoader.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- WebappClassLoader.java 2001/07/12 21:22:25 1.8
+++ WebappClassLoader.java 2001/07/14 06:51:39 1.9
@@ -1,7 +1,7 @@
/*
- * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/loader/WebappClassLoader.java,v 1.8 2001/07/12 21:22:25 remm Exp $
- * $Revision: 1.8 $
- * $Date: 2001/07/12 21:22:25 $
+ * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/loader/WebappClassLoader.java,v 1.9 2001/07/14 06:51:39 remm Exp $
+ * $Revision: 1.9 $
+ * $Date: 2001/07/14 06:51:39 $
*
* ====================================================================
*
@@ -123,7 +123,7 @@
*
* @author Remy Maucherat
* @author Craig R. McClanahan
- * @version $Revision: 1.8 $ $Date: 2001/07/12 21:22:25 $
+ * @version $Revision: 1.9 $ $Date: 2001/07/14 06:51:39 $
*/
public class WebappClassLoader
extends URLClassLoader
@@ -687,13 +687,23 @@
// Checking for modified loaded resources
int length = paths.length;
+ // A rare race condition can occur in the updates of the two arrays
+ // It's totally ok if the latest class added is not checked (it will
+ // be checked the next time
+ int length2 = lastModifiedDates.length;
+ if (length > length2)
+ length = length2;
+
for (int i = 0; i < length; i++) {
try {
long lastModified =
((ResourceAttributes) resources.getAttributes(paths[i]))
.getLastModified().getTime();
if (lastModified != lastModifiedDates[i]) {
- log(" Resource '" + paths[i] + "' was modified");
+ log(" Resource '" + paths[i]
+ + "' was modified; Date is now: "
+ + new java.util.Date(lastModified) + " Was: "
+ + new java.util.Date(lastModifiedDates[i]));
return (true);
}
} catch (NamingException e) {
@@ -1535,19 +1545,19 @@
int j;
- String[] result = new String[paths.length + 1];
- for (j = 0; j < paths.length; j++) {
- result[j] = paths[j];
- }
- result[paths.length] = fullPath;
- paths = result;
-
long[] result2 = new long[lastModifiedDates.length + 1];
for (j = 0; j < lastModifiedDates.length; j++) {
result2[j] = lastModifiedDates[j];
}
result2[lastModifiedDates.length] = entry.lastModified;
lastModifiedDates = result2;
+
+ String[] result = new String[paths.length + 1];
+ for (j = 0; j < paths.length; j++) {
+ result[j] = paths[j];
+ }
+ result[paths.length] = fullPath;
+ paths = result;
}
1.11 +12 -7 jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/loader/WebappLoader.java
Index: WebappLoader.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/loader/WebappLoader.java,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- WebappLoader.java 2001/07/13 01:47:47 1.10
+++ WebappLoader.java 2001/07/14 06:51:39 1.11
@@ -1,7 +1,7 @@
/*
- * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/loader/WebappLoader.java,v 1.10 2001/07/13 01:47:47 remm Exp $
- * $Revision: 1.10 $
- * $Date: 2001/07/13 01:47:47 $
+ * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/loader/WebappLoader.java,v 1.11 2001/07/14 06:51:39 remm Exp $
+ * $Revision: 1.11 $
+ * $Date: 2001/07/14 06:51:39 $
*
* ====================================================================
*
@@ -119,7 +119,7 @@
*
* @author Craig R. McClanahan
* @author Remy Maucherat
- * @version $Revision: 1.10 $ $Date: 2001/07/13 01:47:47 $
+ * @version $Revision: 1.11 $ $Date: 2001/07/14 06:51:39 $
*/
public class WebappLoader
@@ -1250,9 +1250,14 @@
// Wait for our check interval
threadSleep();
- // Perform our modification check
- if (!classLoader.modified())
- continue;
+ try {
+ // Perform our modification check
+ if (!classLoader.modified())
+ continue;
+ } catch (Exception e) {
+ log(sm.getString("webappLoader.failModifiedCheck"), e);
+ continue;
+ }
// Handle a need for reloading
notifyContext();