11/* 
2-  * Copyright 2002-2013  the original author or authors. 
2+  * Copyright 2002-2015  the original author or authors. 
33 * 
44 * Licensed under the Apache License, Version 2.0 (the "License"); 
55 * you may not use this file except in compliance with the License. 
1313 * See the License for the specific language governing permissions and 
1414 * limitations under the License. 
1515 */ 
16+ 
1617package  org .springframework .web .context .request .async ;
1718
1819import  java .util .PriorityQueue ;
@@ -64,9 +65,9 @@ public class DeferredResult<T> {
6465
6566	private  DeferredResultHandler  resultHandler ;
6667
67- 	private  Object  result  = RESULT_NONE ;
68+ 	private  volatile   Object  result  = RESULT_NONE ;
6869
69- 	private  boolean  expired ;
70+ 	private  volatile   boolean  expired ;
7071
7172
7273	/** 
@@ -95,33 +96,34 @@ public DeferredResult(Long timeout, Object timeoutResult) {
9596		this .timeout  = timeout ;
9697	}
9798
99+ 
98100	/** 
99101	 * Return {@code true} if this DeferredResult is no longer usable either 
100102	 * because it was previously set or because the underlying request expired. 
101- 	 * <p> 
102- 	 * The result may have been set with a call to {@link #setResult(Object)}, 
103+ 	 * <p>The result may have been set with a call to {@link #setResult(Object)}, 
103104	 * or {@link #setErrorResult(Object)}, or as a result of a timeout, if a 
104105	 * timeout result was provided to the constructor. The request may also 
105106	 * expire due to a timeout or network error. 
106107	 */ 
107108	public  final  boolean  isSetOrExpired () {
108- 		return  (( this .result  != RESULT_NONE )  || this .expired );
109+ 		return  (this .result  != RESULT_NONE  || this .expired );
109110	}
110111
111112	/** 
112- 	 * @return  {@code true} if the DeferredResult has been set. 
113+ 	 * Return  {@code true} if the DeferredResult has been set. 
113114	 */ 
114115	public  boolean  hasResult () {
115- 		return  this .result  != RESULT_NONE ;
116+ 		return  ( this .result  != RESULT_NONE ) ;
116117	}
117118
118119	/** 
119- 	 * @return  the result or {@code null} if the result wasn't set; since  the result can  
120- 	 *          also be {@code null}, it is recommended to use {@link #hasResult()} first 
121- 	 *          to check if there is a result prior to calling this method. 
120+ 	 * Return  the result,  or {@code null} if the result wasn't set. Since  the result 
121+ 	 * can  also be {@code null}, it is recommended to use {@link #hasResult()} first 
122+ 	 * to check if there is a result prior to calling this method. 
122123	 */ 
123124	public  Object  getResult () {
124- 		return  hasResult () ? this .result  : null ;
125+ 		Object  resultToCheck  = this .result ;
126+ 		return  (resultToCheck  != RESULT_NONE  ? resultToCheck  : null );
125127	}
126128
127129	/** 
@@ -162,12 +164,12 @@ public final void setResultHandler(DeferredResultHandler resultHandler) {
162164		Assert .notNull (resultHandler , "DeferredResultHandler is required" );
163165		synchronized  (this ) {
164166			this .resultHandler  = resultHandler ;
165- 			if  (( this .result  != RESULT_NONE )  && ( !this .expired ) ) {
167+ 			if  (this .result  != RESULT_NONE  && !this .expired ) {
166168				try  {
167169					this .resultHandler .handleResult (this .result );
168170				}
169- 				catch  (Throwable  t ) {
170- 					logger .trace ("DeferredResult not handled" , t );
171+ 				catch  (Throwable  ex ) {
172+ 					logger .trace ("DeferredResult not handled" , ex );
171173				}
172174			}
173175		}
@@ -211,9 +213,9 @@ public boolean setErrorResult(Object result) {
211213		return  setResultInternal (result );
212214	}
213215
216+ 
214217	final  DeferredResultProcessingInterceptor  getInterceptor () {
215218		return  new  DeferredResultProcessingInterceptorAdapter () {
216- 
217219			@ Override 
218220			public  <S > boolean  handleTimeout (NativeWebRequest  request , DeferredResult <S > deferredResult ) {
219221				if  (timeoutCallback  != null ) {
@@ -224,7 +226,6 @@ public <S> boolean handleTimeout(NativeWebRequest request, DeferredResult<S> def
224226				}
225227				return  true ;
226228			}
227- 
228229			@ Override 
229230			public  <S > void  afterCompletion (NativeWebRequest  request , DeferredResult <S > deferredResult ) {
230231				synchronized  (DeferredResult .this ) {
0 commit comments