craigmcc    01/04/24 19:20:49

  Modified:    catalina/src/share/org/apache/catalina/core
                        LocalStrings.properties StandardWrapper.java
  Log:
  [PFD2-2.3.4] "Before the servlet container calls the destroy method, it must
  allow any threads that are currently running in the service method of the
  servlet to complete execution, or exceed a server defined time limit."
  
  Added a check on whether our (single) instance has been allocated, and wait
  for it to be deallocated before calling destroy().
  
  Revision  Changes    Path
  1.31      +2 -0      
jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/LocalStrings.properties
  
  Index: LocalStrings.properties
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/LocalStrings.properties,v
  retrieving revision 1.30
  retrieving revision 1.31
  diff -u -r1.30 -r1.31
  --- LocalStrings.properties   2001/04/15 10:45:28     1.30
  +++ LocalStrings.properties   2001/04/25 02:20:48     1.31
  @@ -282,6 +282,8 @@
   
   standardWrapper.unloadException=Servlet {0} threw unload() exception
   
  +standardWrapper.unloading=Cannot allocate servlet {0} because it is being unloaded
  +
   http.100=The client may continue ({0}).
   
   http.101=The server is switching protocols according to the "Upgrade" header ({0}).
  
  
  
  1.19      +36 -4     
jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/StandardWrapper.java
  
  Index: StandardWrapper.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/StandardWrapper.java,v
  retrieving revision 1.18
  retrieving revision 1.19
  diff -u -r1.18 -r1.19
  --- StandardWrapper.java      2001/04/07 22:33:01     1.18
  +++ StandardWrapper.java      2001/04/25 02:20:48     1.19
  @@ -1,7 +1,7 @@
   /*
  - * $Header: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/StandardWrapper.java,v
 1.18 2001/04/07 22:33:01 remm Exp $
  - * $Revision: 1.18 $
  - * $Date: 2001/04/07 22:33:01 $
  + * $Header: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/StandardWrapper.java,v
 1.19 2001/04/25 02:20:48 craigmcc Exp $
  + * $Revision: 1.19 $
  + * $Date: 2001/04/25 02:20:48 $
    *
    * ====================================================================
    *
  @@ -104,7 +104,7 @@
    * make them efficient are counter-productive.
    *
    * @author Craig R. McClanahan
  - * @version $Revision: 1.18 $ $Date: 2001/04/07 22:33:01 $
  + * @version $Revision: 1.19 $ $Date: 2001/04/25 02:20:48 $
    */
   
   public final class StandardWrapper
  @@ -221,6 +221,12 @@
       private boolean singleThreadModel = false;
   
   
  +    /**
  +     * Are we unloading our servlet instance at the moment?
  +     */
  +    private boolean unloading = false;
  +
  +
       // ------------------------------------------------------------- Properties
   
   
  @@ -577,6 +583,11 @@
        if (debug >= 1)
            log("Allocating an instance");
   
  +        // If we are currently unloading this servlet, throw an exception
  +        if (unloading)
  +            throw new ServletException
  +              (sm.getString("standardWrapper.unloading", getName()));
  +
        // Load and initialize our instance if necessary
        if (instance == null) {
            try {
  @@ -930,6 +941,25 @@
        // Nothing to do if we have never loaded the instance
        if (instance == null)
            return;
  +        unloading = true;
  +
  +        // Loaf a while if the current instance is allocated
  +        if (allocated) {
  +            boolean first = true;
  +            while (allocated) {
  +                if (first) {
  +                    if (debug >= 1)
  +                        log("Waiting for instance to be deallocated");
  +                    first = false;
  +                }
  +                try {
  +                    Thread.sleep(1000);
  +                } catch (InterruptedException e) {
  +                    ;
  +                }
  +            }
  +        }
  +              
   
        // Call the servlet destroy() method
        try {
  @@ -943,6 +973,7 @@
              (InstanceEvent.AFTER_DESTROY_EVENT, instance);
            instance = null;
            fireContainerEvent("unload", this);
  +            unloading = false;
            throw new ServletException
                (sm.getString("standardWrapper.destroyException", getName()),
                 t);
  @@ -951,6 +982,7 @@
        // Deregister the destroyed instance
        instance = null;
           jasperLoader = null;
  +        unloading = false;
        fireContainerEvent("unload", this);
   
       }
  
  
  

Reply via email to