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> { @@ -253,13 +253,24 @@ public class DeferredResult<T> {
return new DeferredResultProcessingInterceptorAdapter() {
@Override
public <S> boolean handleTimeout(NativeWebRequest request, DeferredResult<S> deferredResult) {
if (timeoutCallback != null) {
timeoutCallback.run();
boolean continueProcessing = true;
try {
if (timeoutCallback != null) {
timeoutCallback.run();
}
}
if (timeoutResult != RESULT_NONE) {
setResultInternal(timeoutResult);
finally {
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
public <S> void afterCompletion(NativeWebRequest request, DeferredResult<S> deferredResult) {

Loading…
Cancel
Save