craigmcc    00/12/16 21:18:58

  Modified:    catalina/src/share/org/apache/catalina/core
                        ApplicationFilterChain.java
  Log:
  Enforce the Servlet API contract for SingleThreadModel that says only one
  request at a time is allowed inside the service() method.  This got broken
  when the filtering model was re-implemented to match the changes in
  Servlet 2.3 PFD, in October.
  
  Revision  Changes    Path
  1.3       +24 -9     
jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/ApplicationFilterChain.java
  
  Index: ApplicationFilterChain.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/ApplicationFilterChain.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- ApplicationFilterChain.java       2000/11/02 23:04:49     1.2
  +++ ApplicationFilterChain.java       2000/12/17 05:18:58     1.3
  @@ -1,7 +1,7 @@
   /*
  - * $Header: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/ApplicationFilterChain.java,v
 1.2 2000/11/02 23:04:49 craigmcc Exp $
  - * $Revision: 1.2 $
  - * $Date: 2000/11/02 23:04:49 $
  + * $Header: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/ApplicationFilterChain.java,v
 1.3 2000/12/17 05:18:58 craigmcc Exp $
  + * $Revision: 1.3 $
  + * $Date: 2000/12/17 05:18:58 $
    *
    * ====================================================================
    *
  @@ -75,6 +75,7 @@
   import javax.servlet.ServletException;
   import javax.servlet.ServletRequest;
   import javax.servlet.ServletResponse;
  +import javax.servlet.SingleThreadModel;
   import javax.servlet.http.HttpServletRequest;
   import javax.servlet.http.HttpServletResponse;
   import org.apache.catalina.InstanceEvent;
  @@ -90,7 +91,7 @@
    * method itself.
    *
    * @author Craig R. McClanahan
  - * @version $Revision: 1.2 $ $Date: 2000/11/02 23:04:49 $
  + * @version $Revision: 1.3 $ $Date: 2000/12/17 05:18:58 $
    */
   
   final class ApplicationFilterChain implements FilterChain {
  @@ -204,11 +205,25 @@
               support.fireInstanceEvent(InstanceEvent.BEFORE_SERVICE_EVENT,
                                         servlet);
               if ((request instanceof HttpServletRequest) &&
  -                (response instanceof HttpServletResponse))
  -                servlet.service((HttpServletRequest) request,
  -                                (HttpServletResponse) response);
  -            else
  -                servlet.service(request, response);
  +                (response instanceof HttpServletResponse)) {
  +                if (servlet instanceof SingleThreadModel) {
  +                    synchronized (servlet) {
  +                        servlet.service((HttpServletRequest) request,
  +                                        (HttpServletResponse) response);
  +                    }
  +                } else {
  +                    servlet.service((HttpServletRequest) request,
  +                                    (HttpServletResponse) response);
  +                }
  +            } else {
  +                if (servlet instanceof SingleThreadModel) {
  +                    synchronized (servlet) {
  +                        servlet.service(request, response);
  +                    }
  +                } else {
  +                    servlet.service(request, response);
  +                }
  +            }
               support.fireInstanceEvent(InstanceEvent.AFTER_SERVICE_EVENT,
                                         servlet);
           } catch (IOException e) {
  
  
  

Reply via email to