Author: jrthomerson
Date: Fri Oct 15 17:27:21 2010
New Revision: 1023028

URL: http://svn.apache.org/viewvc?rev=1023028&view=rev
Log:
fixes problems in WICKET-3108

Modified:
    
wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/Session.java

Modified: 
wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/Session.java
URL: 
http://svn.apache.org/viewvc/wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/Session.java?rev=1023028&r1=1023027&r2=1023028&view=diff
==============================================================================
--- 
wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/Session.java
 (original)
+++ 
wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/Session.java
 Fri Oct 15 17:27:21 2010
@@ -921,7 +921,7 @@ public abstract class Session implements
                final int maxPageMaps = 
getApplication().getSessionSettings().getMaxPageMaps();
                synchronized (usedPageMaps)
                {
-                       if (usedPageMaps.size() >= maxPageMaps)
+                       while (usedPageMaps.size() >= maxPageMaps)
                        {
                                IPageMap pm = usedPageMaps.getFirst();
                                pm.remove();
@@ -931,6 +931,7 @@ public abstract class Session implements
                // Create new page map
                final IPageMap pageMap = getSessionStore().createPageMap(name);
                setAttribute(attributeForPageMapName(name), pageMap);
+               dirtyPageMap(pageMap);
                dirty();
                return pageMap;
        }
@@ -971,6 +972,10 @@ public abstract class Session implements
                        usedPageMaps.remove(pageMap);
                }
 
+               // the page map also needs to be removed from the dirty objects 
list or
+               // the requestDetached method will end up adding it back into 
session
+               getDirtyObjectsList().remove(pageMap);
+
                removeAttribute(attributeForPageMapName(pageMap.getName()));
                dirty();
        }
@@ -1351,14 +1356,13 @@ public abstract class Session implements
         */
        void dirtyPageMap(final IPageMap map)
        {
-               if (!map.isDefault())
+
+               synchronized (usedPageMaps)
                {
-                       synchronized (usedPageMaps)
-                       {
-                               usedPageMaps.remove(map);
-                               usedPageMaps.addLast(map);
-                       }
+                       usedPageMaps.remove(map);
+                       usedPageMaps.addLast(map);
                }
+
                List<IClusterable> dirtyObjects = getDirtyObjectsList();
                if (!dirtyObjects.contains(map))
                {


Reply via email to