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();