Author: jcompagner
Date: Tue Mar 31 08:59:24 2009
New Revision: 760373
URL: http://svn.apache.org/viewvc?rev=760373&view=rev
Log:
Better fix for "WebApplication is not thread-safe"
use putIfAbsent and use the return value if something was already there.
Issue: WICKET-2191
Modified:
wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/WebApplication.java
Modified:
wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/WebApplication.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/WebApplication.java?rev=760373&r1=760372&r2=760373&view=diff
==============================================================================
---
wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/WebApplication.java
(original)
+++
wicket/trunk/wicket/src/main/java/org/apache/wicket/protocol/http/WebApplication.java
Tue Mar 31 08:59:24 2009
@@ -18,6 +18,7 @@
import java.util.Collections;
import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
@@ -130,7 +131,7 @@
* Map of buffered responses that are in progress per session. Buffered
responses are
* temporarily stored
*/
- private final Map<String, Map<String, BufferedHttpServletResponse>>
bufferedResponses = Generics.newConcurrentHashMap();
+ private final ConcurrentHashMap<String, Map<String,
BufferedHttpServletResponse>> bufferedResponses =
Generics.newConcurrentHashMap();
/** the default request cycle processor implementation. */
private IRequestCycleProcessor requestCycleProcessor;
@@ -692,7 +693,12 @@
{
responsesPerSession = Collections.synchronizedMap(new
MostRecentlyUsedMap<String, BufferedHttpServletResponse>(
4));
- bufferedResponses.put(sessionId, responsesPerSession);
+ Map<String, BufferedHttpServletResponse> previousValue
= bufferedResponses.putIfAbsent(
+ sessionId, responsesPerSession);
+ if (previousValue != null)
+ {
+ responsesPerSession = previousValue;
+ }
}
responsesPerSession.put(bufferId, renderedResponse);
}