Marcell Hegedus created IVY-1362:
------------------------------------

             Summary: Memory leak and infinite loop in ModuleId.java
                 Key: IVY-1362
                 URL: https://issues.apache.org/jira/browse/IVY-1362
             Project: Ivy
          Issue Type: Bug
          Components: Core
    Affects Versions: 2.2.0
         Environment: Eclipse / IvyDE
            Reporter: Marcell Hegedus


ModuleId tries save memory by interning objects. This ModuleId cache is not 
synchronized and when it is mutated from concurrent threads it is possible that 
the WeakHashMap will contain a loop. As described in the blog post: ["A 
Beautiful Race 
Condition"|http://mailinator.blogspot.hu/2009/06/beautiful-race-condition.html]

The same issue and a memory leak was fixed in IVY-791.

{code:title=Stacktrace of a hanging thread}
java.lang.Thread.State: RUNNABLE
        at java.util.WeakHashMap.get(Unknown Source)
        at org.apache.ivy.core.module.id.ModuleId.intern(ModuleId.java:63)
        at org.apache.ivy.core.module.id.ModuleId.newInstance(ModuleId.java:48)
        at 
org.apache.ivy.core.module.id.ModuleRevisionId.newInstance(ModuleRevisionId.java:100)
        at 
org.apache.ivy.plugins.parser.m2.PomModuleDescriptorBuilder.addDependency(PomModuleDescriptorBuilder.java:285)
        at 
org.apache.ivy.plugins.parser.m2.PomModuleDescriptorParser.parseDescriptor(PomModuleDescriptorParser.java:262)
        at 
org.apache.ivy.plugins.parser.m2.PomModuleDescriptorParser.parseDescriptor(PomModuleDescriptorParser.java:108)
        at 
org.apache.ivy.core.cache.DefaultRepositoryCacheManager$MyModuleDescriptorProvider.provideModule(DefaultRepositoryCacheManager.java:659)
        at 
org.apache.ivy.core.cache.ModuleDescriptorMemoryCache.getStale(ModuleDescriptorMemoryCache.java:68)
        at 
org.apache.ivy.core.cache.DefaultRepositoryCacheManager.getStaledMd(DefaultRepositoryCacheManager.java:676)
        at 
org.apache.ivy.core.cache.DefaultRepositoryCacheManager.cacheModuleDescriptor(DefaultRepositoryCacheManager.java:993)
        at 
org.apache.ivy.plugins.resolver.BasicResolver.parse(BasicResolver.java:546)
        at 
org.apache.ivy.plugins.resolver.BasicResolver.getDependency(BasicResolver.java:266)
        at 
org.apache.ivy.plugins.resolver.IBiblioResolver.getDependency(IBiblioResolver.java:503)
        at 
org.apache.ivy.plugins.resolver.ChainResolver.getDependency(ChainResolver.java:104)
        at 
org.apache.ivy.plugins.resolver.ChainResolver.getDependency(ChainResolver.java:104)
        at 
org.apache.ivy.plugins.resolver.ChainResolver.getDependency(ChainResolver.java:104)
        at org.apache.ivy.core.resolve.IvyNode.loadData(IvyNode.java:169)
        at org.apache.ivy.core.resolve.VisitNode.loadData(VisitNode.java:287)
        at 
org.apache.ivy.core.resolve.ResolveEngine.fetchDependencies(ResolveEngine.java:696)
        at 
org.apache.ivy.core.resolve.ResolveEngine.doFetchDependencies(ResolveEngine.java:781)
        at 
org.apache.ivy.core.resolve.ResolveEngine.fetchDependencies(ResolveEngine.java:704)
        at 
org.apache.ivy.core.resolve.ResolveEngine.doFetchDependencies(ResolveEngine.java:769)
        at 
org.apache.ivy.core.resolve.ResolveEngine.fetchDependencies(ResolveEngine.java:704)
        at 
org.apache.ivy.core.resolve.ResolveEngine.doFetchDependencies(ResolveEngine.java:769)
        at 
org.apache.ivy.core.resolve.ResolveEngine.fetchDependencies(ResolveEngine.java:704)
        at 
org.apache.ivy.core.resolve.ResolveEngine.doFetchDependencies(ResolveEngine.java:781)
        at 
org.apache.ivy.core.resolve.ResolveEngine.fetchDependencies(ResolveEngine.java:704)
        at 
org.apache.ivy.core.resolve.ResolveEngine.doFetchDependencies(ResolveEngine.java:781)
        at 
org.apache.ivy.core.resolve.ResolveEngine.fetchDependencies(ResolveEngine.java:704)
        at 
org.apache.ivy.core.resolve.ResolveEngine.getDependencies(ResolveEngine.java:576)
        at 
org.apache.ivy.core.resolve.ResolveEngine.resolve(ResolveEngine.java:237)
        at org.apache.ivy.Ivy.resolve(Ivy.java:512)
        at 
org.apache.ivyde.eclipse.cpcontainer.IvyResolveJobThread.resolve(IvyResolveJobThread.java:224)
        at 
org.apache.ivyde.eclipse.cpcontainer.IvyResolveJobThread.run(IvyResolveJobThread.java:127)
{code}

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to