Vincent Massol wrote: > On Mar 1, 2010, at 11:18 AM, Caleb James DeLisle wrote: > >> >> Vincent Massol wrote: >>> On Mar 1, 2010, at 10:48 AM, Caleb James DeLisle wrote: >>> >>>> By clearing the XWikiContext in the tearDown of the unit test, I can >>>> stop the memory leak and stop running the tests in isolation. I am >>>> proposing we apply this change because the XWikiContext is created >>>> per test and the worst problem which can be created is tests >>>> erroneously passing which I don't think is very likely from a change >>>> like this. >>> +1 for the main reason that this improves build times. The second reason >>> is that it makes memory leaks more visible which gives us a better chance >>> to find them (although this won't replace performance tests running over a >>> few days for ex). >>> >>> However please add a comment just above the getContext().clear() to explain >>> why this is needed. BTW why is it needed? :) >> I will do that. The reason it's needed is because (it seems) the >> context is referenced by a static variable which isn't cleared and >> rather than pick through the tests looking for where the reference >> was (and hoping no test ever does it again) I opted to clear the >> context and let the tests use the context as they wish. This is my >> understanding of the situation. > > Then the question is why do we reference the context statically? Can't we > remove that?
Static referencing is more a theory than a fact, the problem as I see it is the context is used everywhere and referenced in a lot of places so anything which is able to escape the tearDown process and happens to hold a reference to the context will cause references to persist pointing to everything. I think the choice is to either clear the context or pour through each test individually looking for any reference which might escape tearDown. I remember running various tests individually and in pairs with very little memory and finding a lot of them seem to have leaks. > > Thanks > -Vincent > >>> Thanks >>> -Vincent >>> >>>> Jira issue: http://jira.xwiki.org/jira/browse/XWIKI-4953 >>>> Patch: >>>> http://jira.xwiki.org/jira/secure/attachment/16788/XWIKI-4496-patchTestMemoryLeak.patch >>>> >>>> Patch content: >>>> >>>> Index: core/xwiki-core/pom.xml >>>> =================================================================== >>>> --- core/xwiki-core/pom.xml (revision 27357) >>>> +++ core/xwiki-core/pom.xml (working copy) >>>> @@ -823,10 +823,6 @@ >>>> <plugin> >>>> <groupId>org.apache.maven.plugins</groupId> >>>> <artifactId>maven-surefire-plugin</artifactId> >>>> - <configuration> >>>> - <!-- Prevent Out Of Memory errors resulting from tests >>>> that do no free up the memory correctly --> >>>> - <forkMode>pertest</forkMode> >>>> - </configuration> >>>> </plugin> >>>> <!-- Publish a Core Test JAR --> >>>> <plugin> >>>> Index: >>>> core/xwiki-core/src/test/java/com/xpn/xwiki/test/AbstractBridgedXWikiComponentTestCase.java >>>> =================================================================== >>>> --- >>>> core/xwiki-core/src/test/java/com/xpn/xwiki/test/AbstractBridgedXWikiComponentTestCase.java >>>> (revision 27357) >>>> +++ >>>> core/xwiki-core/src/test/java/com/xpn/xwiki/test/AbstractBridgedXWikiComponentTestCase.java >>>> (working copy) >>>> @@ -80,6 +80,7 @@ >>>> protected void tearDown() throws Exception >>>> { >>>> Utils.setComponentManager(null); >>>> + getContext().clear(); >>>> super.tearDown(); >>>> } >>>> > > _______________________________________________ > devs mailing list > [email protected] > http://lists.xwiki.org/mailman/listinfo/devs > _______________________________________________ devs mailing list [email protected] http://lists.xwiki.org/mailman/listinfo/devs

