You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by cr...@apache.org on 2001/08/23 18:42:27 UTC

cvs commit: jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets InvokerServlet.java

craigmcc    01/08/23 09:42:27

  Modified:    catalina/src/share/org/apache/catalina/core
                        StandardWrapper.java
               catalina/src/share/org/apache/catalina/servlets
                        InvokerServlet.java
  Log:
  Fix the race condition on the invoker servlet for real this time.  It
  helps if you include *all* of the critical section code inside the
  synchronized block.
  
  PR: Bugzilla #3188
  Submitted by:  Eddie Ruvinsky
  
  Revision  Changes    Path
  1.29      +8 -5      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.28
  retrieving revision 1.29
  diff -u -r1.28 -r1.29
  --- StandardWrapper.java	2001/08/16 02:46:52	1.28
  +++ StandardWrapper.java	2001/08/23 16:42:26	1.29
  @@ -1,7 +1,7 @@
   /*
  - * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/StandardWrapper.java,v 1.28 2001/08/16 02:46:52 craigmcc Exp $
  - * $Revision: 1.28 $
  - * $Date: 2001/08/16 02:46:52 $
  + * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/StandardWrapper.java,v 1.29 2001/08/23 16:42:26 craigmcc Exp $
  + * $Revision: 1.29 $
  + * $Date: 2001/08/23 16:42:26 $
    *
    * ====================================================================
    *
  @@ -105,7 +105,7 @@
    * make them efficient are counter-productive.
    *
    * @author Craig R. McClanahan
  - * @version $Revision: 1.28 $ $Date: 2001/08/16 02:46:52 $
  + * @version $Revision: 1.29 $ $Date: 2001/08/23 16:42:26 $
    */
   
   public final class StandardWrapper
  @@ -1133,7 +1133,10 @@
       protected String logName() {
   
           StringBuffer sb = new StringBuffer("StandardWrapper[");
  -        sb.append(getParent().getName());
  +        if (getParent() != null)
  +            sb.append(getParent().getName());
  +        else
  +            sb.append("null");
           sb.append(':');
           sb.append(getName());
           sb.append(']');
  
  
  
  1.12      +22 -21    jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/InvokerServlet.java
  
  Index: InvokerServlet.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/InvokerServlet.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- InvokerServlet.java	2001/08/20 22:43:52	1.11
  +++ InvokerServlet.java	2001/08/23 16:42:26	1.12
  @@ -1,7 +1,7 @@
   /*
  - * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/InvokerServlet.java,v 1.11 2001/08/20 22:43:52 craigmcc Exp $
  - * $Revision: 1.11 $
  - * $Date: 2001/08/20 22:43:52 $
  + * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/InvokerServlet.java,v 1.12 2001/08/23 16:42:26 craigmcc Exp $
  + * $Revision: 1.12 $
  + * $Date: 2001/08/23 16:42:26 $
    *
    * ====================================================================
    *
  @@ -87,7 +87,7 @@
    * in the web application deployment descriptor.
    *
    * @author Craig R. McClanahan
  - * @version $Revision: 1.11 $ $Date: 2001/08/20 22:43:52 $
  + * @version $Revision: 1.12 $ $Date: 2001/08/23 16:42:26 $
    */
   
   public final class InvokerServlet
  @@ -326,26 +326,27 @@
           String pattern = inServletPath + "/" + servletClass + "/*";
           Wrapper wrapper = null;
   
  -        // Are we referencing an existing servlet name?
  -        wrapper = (Wrapper) context.findChild(servletClass);
  -        if (wrapper != null) {
  -            if (debug >= 1)
  -                log("Using wrapper for servlet '" +
  -                    wrapper.getName() + "' with mapping '" + pattern + "'");
  -            context.addServletMapping(pattern, wrapper.getName());
  -        }
  +        // Synchronize to avoid race conditions when multiple requests
  +        // try to initialize the same servlet at the same time
  +        synchronized (this) {
  +
  +            // Are we referencing an existing servlet name?
  +            wrapper = (Wrapper) context.findChild(servletClass);
  +            if (wrapper != null) {
  +                if (debug >= 1)
  +                    log("Using wrapper for servlet '" +
  +                        wrapper.getName() + "' with mapping '" +
  +                        pattern + "'");
  +                context.addServletMapping(pattern, wrapper.getName());
  +            }
   
  -        // No, create a new wrapper for the specified servlet class
  -        else {
  +            // No, create a new wrapper for the specified servlet class
  +            else {
   
  -            if (debug >= 1)
  -                log("Creating wrapper for '" + servletClass +
  -                    "' with mapping '" + pattern + "'");
  +                if (debug >= 1)
  +                    log("Creating wrapper for '" + servletClass +
  +                        "' with mapping '" + pattern + "'");
   
  -            // Create and install a new wrapper (synchronized to avoid
  -            // race conditions when multiple requests try to initialize
  -            // the same servlet at the same time)
  -            synchronized (this) {
                   try {
                       wrapper = context.createWrapper();
                       wrapper.setName(name);