You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2012/02/28 14:35:16 UTC

svn commit: r1294641 - in /camel/branches/camel-2.9.x: ./ camel-core/src/main/java/org/apache/camel/ camel-core/src/main/java/org/apache/camel/management/mbean/ camel-core/src/main/java/org/apache/camel/support/

Author: davsclaus
Date: Tue Feb 28 13:35:16 2012
New Revision: 1294641

URL: http://svn.apache.org/viewvc?rev=1294641&view=rev
Log:
CAMEL-5049: Fixed memory leak due timer listener not get properly removed when removing routes, when adding/removing a lot of routes at runtime.

Modified:
    camel/branches/camel-2.9.x/   (props changed)
    camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/TimerListener.java
    camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java
    camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/support/TimerListenerManager.java

Propchange: camel/branches/camel-2.9.x/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Feb 28 13:35:16 2012
@@ -1 +1 @@
-/camel/trunk:1243046,1243057,1243234,1244518,1244644,1244859,1244861,1244864,1244870,1244872,1245021,1291555,1291727,1291848,1291864,1292114,1292384,1292725,1292760,1292767,1293079,1293268,1293288,1293330,1293590,1293828,1293852,1293855,1294130,1294482,1294502,1294533,1294588
+/camel/trunk:1243046,1243057,1243234,1244518,1244644,1244859,1244861,1244864,1244870,1244872,1245021,1291555,1291727,1291848,1291864,1292114,1292384,1292725,1292760,1292767,1293079,1293268,1293288,1293330,1293590,1293828,1293852,1293855,1294130,1294482,1294502,1294533,1294588,1294639

Propchange: camel/branches/camel-2.9.x/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.

Modified: camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/TimerListener.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/TimerListener.java?rev=1294641&r1=1294640&r2=1294641&view=diff
==============================================================================
--- camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/TimerListener.java (original)
+++ camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/TimerListener.java Tue Feb 28 13:35:16 2012
@@ -29,5 +29,5 @@ public interface TimerListener {
      * Notification invoked.
      */
     void onTimer();
-    
+
 }

Modified: camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java?rev=1294641&r1=1294640&r2=1294641&view=diff
==============================================================================
--- camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java (original)
+++ camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java Tue Feb 28 13:35:16 2012
@@ -214,4 +214,20 @@ public class ManagedRoute extends Manage
         context.addRouteDefinition(def);
     }
 
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+
+        ManagedRoute that = (ManagedRoute) o;
+
+        if (!route.equals(that.route)) return false;
+
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        return route.hashCode();
+    }
 }

Modified: camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/support/TimerListenerManager.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/support/TimerListenerManager.java?rev=1294641&r1=1294640&r2=1294641&view=diff
==============================================================================
--- camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/support/TimerListenerManager.java (original)
+++ camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/support/TimerListenerManager.java Tue Feb 28 13:35:16 2012
@@ -33,6 +33,9 @@ import org.slf4j.LoggerFactory;
  * <p/>
  * The {@link #setExecutorService(java.util.concurrent.ScheduledExecutorService)} method
  * must be invoked prior to starting this manager using the {@link #start()} method.
+ * <p/>
+ * Also ensure when adding and remove listeners, that they are correctly removed to avoid
+ * leaking memory.
  *
  * @see TimerListener
  */
@@ -91,11 +94,27 @@ public class TimerListenerManager extend
         }
     }
 
+    /**
+     * Adds the listener.
+     * <p/>
+     * It may be important to implement {@link #equals(Object)} and {@link #hashCode()} for the listener
+     * to ensure that we can remove the same listener again, when invoking remove.
+     * 
+     * @param listener listener
+     */
     public void addTimerListener(TimerListener listener) {
         listeners.add(listener);
         LOG.debug("Added TimerListener: {}", listener);
     }
 
+    /**
+     * Removes the listener.
+     * <p/>
+     * It may be important to implement {@link #equals(Object)} and {@link #hashCode()} for the listener
+     * to ensure that we can remove the same listener again, when invoking remove.
+     *
+     * @param listener listener.
+     */
     public void removeTimerListener(TimerListener listener) {
         listeners.remove(listener);
         LOG.debug("Removed TimerListener: {}", listener);
@@ -117,5 +136,10 @@ public class TimerListenerManager extend
         }
     }
 
+    @Override
+    protected void doShutdown() throws Exception {
+        super.doShutdown();
+        listeners.clear();
+    }
 }