You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by jc...@apache.org on 2007/04/11 16:04:34 UTC

svn commit: r527498 - in /incubator/wicket/tags/dashorst/20061204-1855/wicket/src/main/java/wicket: PageMap.java Session.java

Author: jcompagner
Date: Wed Apr 11 07:04:24 2007
New Revision: 527498

URL: http://svn.apache.org/viewvc?view=rev&rev=527498
Log:
pagemap leak fix?

Modified:
    incubator/wicket/tags/dashorst/20061204-1855/wicket/src/main/java/wicket/PageMap.java
    incubator/wicket/tags/dashorst/20061204-1855/wicket/src/main/java/wicket/Session.java

Modified: incubator/wicket/tags/dashorst/20061204-1855/wicket/src/main/java/wicket/PageMap.java
URL: http://svn.apache.org/viewvc/incubator/wicket/tags/dashorst/20061204-1855/wicket/src/main/java/wicket/PageMap.java?view=diff&rev=527498&r1=527497&r2=527498
==============================================================================
--- incubator/wicket/tags/dashorst/20061204-1855/wicket/src/main/java/wicket/PageMap.java (original)
+++ incubator/wicket/tags/dashorst/20061204-1855/wicket/src/main/java/wicket/PageMap.java Wed Apr 11 07:04:24 2007
@@ -128,18 +128,29 @@
 		{
 			
 			// now we have big shit
-			log.error("Session stored in pagemap (" + session.getId()
+			log.error("Session stored in pagemap '" + getName() + "'(" + session.getId()
 					+ ") is not equal to request session (" + threadSession.getId() + ")", new Exception());
 			// fixing the session
 			session = threadSession;
+			wrongPageMap = true;
 			// clear the current page.
 			houstonWeHaveAProblem();
 		}
+		else
+		{
+			wrongPageMap = false;
+		}
 		return session;
 	}
 
+	private boolean wrongPageMap = false;
 	protected void houstonWeHaveAProblem() 
 	{
+	}
+	
+	public boolean isWrongPageMap()
+	{
+		return wrongPageMap;
 	}
 
 	/**

Modified: incubator/wicket/tags/dashorst/20061204-1855/wicket/src/main/java/wicket/Session.java
URL: http://svn.apache.org/viewvc/incubator/wicket/tags/dashorst/20061204-1855/wicket/src/main/java/wicket/Session.java?view=diff&rev=527498&r1=527497&r2=527498
==============================================================================
--- incubator/wicket/tags/dashorst/20061204-1855/wicket/src/main/java/wicket/Session.java (original)
+++ incubator/wicket/tags/dashorst/20061204-1855/wicket/src/main/java/wicket/Session.java Wed Apr 11 07:04:24 2007
@@ -1071,6 +1071,7 @@
 
 		// Go through all dirty entries, replicating any dirty objects
 		List dirtyObjects = (List)Session.dirtyObjects.get();
+		Session.dirtyObjects.set(null);
 		if (dirtyObjects != null)
 		{
 			for (final Iterator iterator = dirtyObjects.iterator(); iterator.hasNext();)
@@ -1097,12 +1098,23 @@
 				}
 				else if (object instanceof IPageMap)
 				{
-					attribute = attributeForPageMapName(((IPageMap)object).getName());
+					if (object instanceof PageMap && ((PageMap)object).getSession() != null && ((PageMap)object).isWrongPageMap())
+					{
+						PageMap pm = (PageMap)object;
+						log.error("Try to store wrong (others) pagemap '" + pm.getName() + " for sessionid: " + getId() , new Exception());
+						// set the session back to null so that it won't constantly bounch 
+						((PageMap)object).setSession(null);
+						// don't store it
+						continue;
+					}
+					else
+					{
+						attribute = attributeForPageMapName(((IPageMap)object).getName());
+					}
 				}
 
 				setAttribute(attribute, object);
 			}
-			Session.dirtyObjects.set(null);
 		}
 	}
 
@@ -1141,6 +1153,14 @@
 	 */
 	final void requestDetached()
 	{
+		// first set the dirty object to null.
+		List dirtyObjects = (List)Session.dirtyObjects.get();
+		Session.dirtyObjects.set(null);
+		if (dirtyObjects != null && dirtyObjects.size() > 0)
+		{
+			log.warn("There where still dirty objects in the request phase, session update wasn't called: " + dirtyObjects);
+		}
+		// release the pagemap if needed.
 		if (pageMapsUsedInRequest != null)
 		{
 			synchronized (pageMapsUsedInRequest)