You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by cz...@apache.org on 2014/09/02 13:09:41 UTC

svn commit: r1621959 - in /felix/trunk/eventadmin/impl: changelog.txt src/main/java/org/apache/felix/eventadmin/impl/tasks/AsyncDeliverTasks.java

Author: cziegeler
Date: Tue Sep  2 11:09:40 2014
New Revision: 1621959

URL: http://svn.apache.org/r1621959
Log:
FELIX-4627 : Event Admin - Memory Leak in AsyncDeliverTasks. Apply modified patch from Bob Paulin

Modified:
    felix/trunk/eventadmin/impl/changelog.txt
    felix/trunk/eventadmin/impl/src/main/java/org/apache/felix/eventadmin/impl/tasks/AsyncDeliverTasks.java

Modified: felix/trunk/eventadmin/impl/changelog.txt
URL: http://svn.apache.org/viewvc/felix/trunk/eventadmin/impl/changelog.txt?rev=1621959&r1=1621958&r2=1621959&view=diff
==============================================================================
--- felix/trunk/eventadmin/impl/changelog.txt (original)
+++ felix/trunk/eventadmin/impl/changelog.txt Tue Sep  2 11:09:40 2014
@@ -3,6 +3,7 @@ Changes from 1.4.0 to 1.4.2
 ** Improvement
     * [FELIX-4623] - Make Async to Sync ThreadPool Ratio Configurable
 ** Bug
+    * [FELIX-4627] - Potential Memory Leak in AsyncDeliverTasks
     * [FELIX-4617] - Empty configurations for ignore topic and ignore timeout lead to error messages in the log
     * [FELIX-4618] - NPE if config value for ignore topic or timeout is empty
 

Modified: felix/trunk/eventadmin/impl/src/main/java/org/apache/felix/eventadmin/impl/tasks/AsyncDeliverTasks.java
URL: http://svn.apache.org/viewvc/felix/trunk/eventadmin/impl/src/main/java/org/apache/felix/eventadmin/impl/tasks/AsyncDeliverTasks.java?rev=1621959&r1=1621958&r2=1621959&view=diff
==============================================================================
--- felix/trunk/eventadmin/impl/src/main/java/org/apache/felix/eventadmin/impl/tasks/AsyncDeliverTasks.java (original)
+++ felix/trunk/eventadmin/impl/src/main/java/org/apache/felix/eventadmin/impl/tasks/AsyncDeliverTasks.java Tue Sep  2 11:09:40 2014
@@ -89,7 +89,7 @@ public class AsyncDeliverTasks
             TaskExecuter executer = m_running_threads.get(currentThreadId);
             if ( executer == null )
             {
-                executer = new TaskExecuter();
+                executer = new TaskExecuter(m_running_threads);
                 m_running_threads.put(currentThreadId, executer);
             }
             synchronized ( executer )
@@ -97,8 +97,10 @@ public class AsyncDeliverTasks
                 executer.add(info);
                 if ( !executer.isActive() )
                 {
+                    // reactivate thread
                     executer.setSyncDeliverTasks(m_deliver_task);
                     m_pool.executeTask(executer);
+                    m_running_threads.put(currentThreadId, executer);
                 }
             }
         //}
@@ -123,6 +125,12 @@ public class AsyncDeliverTasks
 
         private volatile SyncDeliverTasks m_deliver_task;
 
+        private final Map<Long, TaskExecuter> m_running_threads;
+
+        public TaskExecuter(Map<Long, TaskExecuter> runningThreads) {
+            m_running_threads = runningThreads;
+        }
+
         public boolean isActive()
         {
             return this.m_deliver_task != null;
@@ -156,6 +164,7 @@ public class AsyncDeliverTasks
                     if ( !running )
                     {
                         this.m_deliver_task = null;
+                        this.m_running_threads.remove(this);
                     }
                 }
             } while ( running );