Defensive processing of timeout callback and timeout result
Issue: SPR-14978
This commit is contained in:
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user