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)