Author: maartenc Date: Fri Apr 4 13:56:22 2008 New Revision: 644911 URL: http://svn.apache.org/viewvc?rev=644911&view=rev Log: FIX: Memory leak in ModuleRevisionId.java (IVY-791)
Modified: ant/ivy/core/trunk/CHANGES.txt ant/ivy/core/trunk/src/java/org/apache/ivy/core/module/id/ModuleRevisionId.java Modified: ant/ivy/core/trunk/CHANGES.txt URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/CHANGES.txt?rev=644911&r1=644910&r2=644911&view=diff ============================================================================== --- ant/ivy/core/trunk/CHANGES.txt (original) +++ ant/ivy/core/trunk/CHANGES.txt Fri Apr 4 13:56:22 2008 @@ -78,6 +78,7 @@ - IMPROVEMENT: Change allownomd and skipbuildwithoutivy into a more semantically correct name (IVY-297) - IMPROVEMENT: Smarter determination if an expression is exact or not for RegexpPatternMatcher and GlobPatternMatcher +- FIX: Memory leak in ModuleRevisionId.java (IVY-791) - FIX: conflict manager scoping does not work as expected (IVY-465) - FIX: ivy.original.xml file using artifact pattern in cache and causing problems (IVY-787) - FIX: ivy:retrieve with sync="true" removes the .svn directory (IVY-763) Modified: ant/ivy/core/trunk/src/java/org/apache/ivy/core/module/id/ModuleRevisionId.java URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/core/module/id/ModuleRevisionId.java?rev=644911&r1=644910&r2=644911&view=diff ============================================================================== --- ant/ivy/core/trunk/src/java/org/apache/ivy/core/module/id/ModuleRevisionId.java (original) +++ ant/ivy/core/trunk/src/java/org/apache/ivy/core/module/id/ModuleRevisionId.java Fri Apr 4 13:56:22 2008 @@ -17,6 +17,7 @@ */ package org.apache.ivy.core.module.id; +import java.lang.ref.WeakReference; import java.util.HashMap; import java.util.Iterator; import java.util.Map; @@ -143,12 +144,19 @@ * @return an interned ModuleRevisionId */ public static ModuleRevisionId intern(ModuleRevisionId moduleRevisionId) { - ModuleRevisionId r = (ModuleRevisionId) CACHE.get(moduleRevisionId); - if (r == null) { - r = moduleRevisionId; - CACHE.put(r, r); + ModuleRevisionId r = null; + synchronized (CACHE) { + WeakReference ref = (WeakReference) CACHE.get(moduleRevisionId); + if (ref != null) { + r = (ModuleRevisionId) ref.get(); + } + if (r == null) { + r = moduleRevisionId; + CACHE.put(r, new WeakReference(r)); + } } + return r; }