Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Bartel2014-06-10 14:27:33 +0000
committerJan Bartel2014-06-10 14:28:45 +0000
commitfb29f56b4db9314a0c20793a629ccf1edba49ad6 (patch)
tree6a8cace9df4136584938553ee745c42e1dad54aa /jetty-servlet/src
parent94164b8fb215b944e505d7702ef3df3c42c4d258 (diff)
downloadorg.eclipse.jetty.project-fb29f56b4db9314a0c20793a629ccf1edba49ad6.tar.gz
org.eclipse.jetty.project-fb29f56b4db9314a0c20793a629ccf1edba49ad6.tar.xz
org.eclipse.jetty.project-fb29f56b4db9314a0c20793a629ccf1edba49ad6.zip
437051 Refactor Filter chain handling of Request.isAsyncSupported
Diffstat (limited to 'jetty-servlet/src')
-rw-r--r--jetty-servlet/src/main/java/org/eclipse/jetty/servlet/ServletHandler.java50
1 files changed, 21 insertions, 29 deletions
diff --git a/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/ServletHandler.java b/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/ServletHandler.java
index 81243e01e7..9e8542e39f 100644
--- a/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/ServletHandler.java
+++ b/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/ServletHandler.java
@@ -1632,25 +1632,20 @@ public class ServletHandler extends ScopedHandler
{
LOG.debug("call filter {}", _filterHolder);
Filter filter= _filterHolder.getFilter();
- if (_filterHolder.isAsyncSupported())
+
+ //if the request already does not support async, then the setting for the filter
+ //is irrelevant. However if the request supports async but this filter does not
+ //temporarily turn it off for the execution of the filter
+ boolean requestAsyncSupported = baseRequest.isAsyncSupported();
+ try
+ {
+ if (!_filterHolder.isAsyncSupported() && requestAsyncSupported)
+ baseRequest.setAsyncSupported(false);
filter.doFilter(request, response, _next);
- else
+ }
+ finally
{
- final boolean suspendable=baseRequest.isAsyncSupported();
- if (suspendable)
- {
- try
- {
- baseRequest.setAsyncSupported(false);
- filter.doFilter(request, response, _next);
- }
- finally
- {
- baseRequest.setAsyncSupported(true);
- }
- }
- else
- filter.doFilter(request, response, _next);
+ baseRequest.setAsyncSupported(requestAsyncSupported);
}
return;
}
@@ -1711,23 +1706,20 @@ public class ServletHandler extends ScopedHandler
LOG.debug("call filter " + holder);
Filter filter= holder.getFilter();
- if (holder.isAsyncSupported() || !_baseRequest.isAsyncSupported())
+ //if the request already does not support async, then the setting for the filter
+ //is irrelevant. However if the request supports async but this filter does not
+ //temporarily turn it off for the execution of the filter
+ boolean requestAsyncSupported = _baseRequest.isAsyncSupported();
+ try
{
+ if (!holder.isAsyncSupported() && requestAsyncSupported)
+ _baseRequest.setAsyncSupported(false);
filter.doFilter(request, response, this);
}
- else
+ finally
{
- try
- {
- _baseRequest.setAsyncSupported(false);
- filter.doFilter(request, response, this);
- }
- finally
- {
- _baseRequest.setAsyncSupported(true);
- }
+ _baseRequest.setAsyncSupported(requestAsyncSupported);
}
-
return;
}

Back to the top