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);
        }


Reply via email to