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;
     }
 


Reply via email to