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) {