Author: remy.maucherat(a)jboss.com
Date: 2009-10-15 20:31:51 -0400 (Thu, 15 Oct 2009)
New Revision: 1196
Modified:
trunk/java/org/apache/catalina/connector/Request.java
trunk/java/org/apache/catalina/core/ApplicationFilterChain.java
Log:
- Fix the pointer and async check algorithm.
Modified: trunk/java/org/apache/catalina/connector/Request.java
===================================================================
--- trunk/java/org/apache/catalina/connector/Request.java 2009-10-15 14:58:30 UTC (rev
1195)
+++ trunk/java/org/apache/catalina/connector/Request.java 2009-10-16 00:31:51 UTC (rev
1196)
@@ -2992,12 +2992,16 @@
ApplicationFilterChain filterChain = filterChains.get(i);
int n = filterChain.getFilterCount();
int pos = filterChain.getPointer();
- for (int j = 0; j < pos; j++) {
+ int lastFilter = pos;
+ if (pos == n + 1) {
+ lastFilter = n;
+ }
+ for (int j = 0; j < lastFilter; j++) {
if (!filterChain.getFilters()[j].getFilterDef().getAsyncSupported()) {
return false;
}
}
- if (pos == n) {
+ if (pos == n + 1) {
if (!filterChain.getWrapper().getAsyncSupported()) {
return false;
}
Modified: trunk/java/org/apache/catalina/core/ApplicationFilterChain.java
===================================================================
--- trunk/java/org/apache/catalina/core/ApplicationFilterChain.java 2009-10-15 14:58:30
UTC (rev 1195)
+++ trunk/java/org/apache/catalina/core/ApplicationFilterChain.java 2009-10-16 00:31:51
UTC (rev 1196)
@@ -252,6 +252,7 @@
// Call the next filter if there is one
if (pos < filterCount) {
ApplicationFilterConfig filterConfig = filters[pos++];
+ pointer++;
Filter filter = null;
try {
filter = filterConfig.getFilter();
@@ -275,22 +276,27 @@
support.fireInstanceEvent(InstanceEvent.AFTER_FILTER_EVENT,
filter, request, response);
+ pointer--;
} catch (IOException e) {
+ pointer--;
if (filter != null)
support.fireInstanceEvent(InstanceEvent.AFTER_FILTER_EVENT,
filter, request, response, e);
throw e;
} catch (ServletException e) {
+ pointer--;
if (filter != null)
support.fireInstanceEvent(InstanceEvent.AFTER_FILTER_EVENT,
filter, request, response, e);
throw e;
} catch (RuntimeException e) {
+ pointer--;
if (filter != null)
support.fireInstanceEvent(InstanceEvent.AFTER_FILTER_EVENT,
filter, request, response, e);
throw e;
} catch (Throwable e) {
+ pointer--;
if (filter != null)
support.fireInstanceEvent(InstanceEvent.AFTER_FILTER_EVENT,
filter, request, response, e);
@@ -302,6 +308,7 @@
// We fell off the end of the chain -- call the servlet instance
Servlet servlet = wrapper.getServlet();
+ pointer++;
try {
if (Globals.STRICT_SERVLET_COMPLIANCE) {
lastServicedRequest.set(request);
@@ -352,6 +359,7 @@
throw new ServletException
(sm.getString("filterChain.servlet"), e);
} finally {
+ pointer--;
if (Globals.STRICT_SERVLET_COMPLIANCE) {
lastServicedRequest.set(null);
lastServicedResponse.set(null);
Show replies by date