FElIX-5051 - Memory leak in async delivery

git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1705009 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/eventadmin/impl/changelog.txt b/eventadmin/impl/changelog.txt
index 1a0097c..97f6185 100644
--- a/eventadmin/impl/changelog.txt
+++ b/eventadmin/impl/changelog.txt
@@ -2,6 +2,8 @@
 ---------------------------
 ** Improvement
     * [FELIX-5006] - EventAdmin threads should be named
+** Bug
+    * [FElIX-5051] - Memory leak in async delivery
 
 
 Changes from 1.4.2 to 1.4.4
diff --git a/eventadmin/impl/src/main/java/org/apache/felix/eventadmin/impl/tasks/AsyncDeliverTasks.java b/eventadmin/impl/src/main/java/org/apache/felix/eventadmin/impl/tasks/AsyncDeliverTasks.java
index 0e5a3c6..651160c 100644
--- a/eventadmin/impl/src/main/java/org/apache/felix/eventadmin/impl/tasks/AsyncDeliverTasks.java
+++ b/eventadmin/impl/src/main/java/org/apache/felix/eventadmin/impl/tasks/AsyncDeliverTasks.java
@@ -89,7 +89,7 @@
             TaskExecuter executer = m_running_threads.get(currentThreadId);
             if ( executer == null )
             {
-                executer = new TaskExecuter(m_running_threads);
+                executer = new TaskExecuter(currentThreadId, m_running_threads);
             }
             synchronized ( executer )
             {
@@ -130,8 +130,11 @@
 
         private final Map<Long, TaskExecuter> m_running_threads;
 
-        public TaskExecuter(Map<Long, TaskExecuter> runningThreads) {
+        private final long threadId;
+
+        public TaskExecuter(final long threadId, final Map<Long, TaskExecuter> runningThreads) {
             m_running_threads = runningThreads;
+            this.threadId = threadId;
         }
 
         public boolean isActive()
@@ -167,7 +170,7 @@
                     if ( !running )
                     {
                         this.m_deliver_task = null;
-                        this.m_running_threads.remove(this);
+                        this.m_running_threads.remove(threadId);
                     }
                 }
             } while ( running );