Browse Source

Defensive processing of timeout callback and timeout result

Issue: SPR-14978
pull/1255/head
Juergen Hoeller 9 years ago
parent
commit
9ba4b47bee
  1. 21
      spring-web/src/main/java/org/springframework/web/context/request/async/DeferredResult.java

21
spring-web/src/main/java/org/springframework/web/context/request/async/DeferredResult.java

@ -253,13 +253,24 @@ public class DeferredResult<T> {
return new DeferredResultProcessingInterceptorAdapter() { return new DeferredResultProcessingInterceptorAdapter() {
@Override @Override
public <S> boolean handleTimeout(NativeWebRequest request, DeferredResult<S> deferredResult) { public <S> boolean handleTimeout(NativeWebRequest request, DeferredResult<S> deferredResult) {
if (timeoutCallback != null) { boolean continueProcessing = true;
timeoutCallback.run(); try {
if (timeoutCallback != null) {
timeoutCallback.run();
}
} }
if (timeoutResult != RESULT_NONE) { finally {
setResultInternal(timeoutResult); if (timeoutResult != RESULT_NONE) {
continueProcessing = false;
try {
setResultInternal(timeoutResult);
}
catch (Throwable ex) {
logger.debug("Failed to handle timeout result", ex);
}
}
} }
return true; return continueProcessing;
} }
@Override @Override
public <S> void afterCompletion(NativeWebRequest request, DeferredResult<S> deferredResult) { public <S> void afterCompletion(NativeWebRequest request, DeferredResult<S> deferredResult) {

Loading…
Cancel
Save