[ https://issues.apache.org/jira/browse/WICKET-3108?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12931134#action_12931134 ]
Pedro Santos commented on WICKET-3108: -------------------------------------- OK: https://issues.apache.org/jira/browse/WICKET-3160 I will use that ticket to provide test cases and further patches. > Problems with page maps stored in session > ----------------------------------------- > > Key: WICKET-3108 > URL: https://issues.apache.org/jira/browse/WICKET-3108 > Project: Wicket > Issue Type: Bug > Components: wicket > Affects Versions: 1.4.12 > Reporter: Jeremy Thomerson > Assignee: Jeremy Thomerson > Priority: Minor > Fix For: 1.4.13 > > Attachments: fix-WICKET-3108-memory-leak.patch, > pagemapstuff-quickstart.tar.gz, patch.txt, patch.txt, problem-1.patch, > problem-2.patch, problem-3.patch, test.patch > > > A client engaged me to assist in fixing multiple problems they found while > writing a custom page map eviction strategy for page maps that have not been > accessed in a while. Digging into the first problem revealed a few others. > I'd like someone who is more familiar than me with the session and page map > stuff to review this before I commit it. The quick start attached > demonstrates the problems. I have yet to write test cases that can be added > to the suite to replicate these issues. > PROBLEM 1: > If you call IPageMap.remove(), the page map is not actually removed because > it's in the dirty objects list, which means that it gets set back on the > session in the requestDetached() method. The quickstart demonstrates this in > a link for ease of demonstration, but in reality, it applies even if someone > is doing custom page map eviction in their request cycle somewhere. > PROBLEM 2: > It seems to be a safe assumption that every page map that is used in the > session should also be in usedPageMaps, and that this map should always be > exactly in sync with what's actually in your session (as attributes). Right > now, they are not in sync. First, the default page map was not added to > usedPageMaps in the dirtyPageMap(IPageMap) method. Second, when page maps > are created, they are not dirtied (which means they are not in the > usedPageMaps collection), although they are set as attributes on the session > immediately. This causes a problem in the newPageMap(String) method with > actually adhering to the max number you set. > PROBLEM 3: > If you have a bunch of popup links on a page, they can create more page maps > than are allowed, and the number of page maps stored in the session grows > beyond the limit of what you've specified. The real unanswered question I > have is this: must we really create the page map when the link is first > rendered? Or could we wait until it is clicked? > NOTE: the fix for problems 2 and 3 relies on the fix for problem 1 being > committed, because the call to pm.remove() in newPageMap(IPageMap) will not > work without the fix for problem 1 -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.