Author: trustin
Date: Tue Nov 13 20:50:12 2007
New Revision: 594762

URL: http://svn.apache.org/viewvc?rev=594762&view=rev
Log:
Fixed a possible memory leak in ReadThrottleFilter

Modified:
    
mina/trunk/core/src/main/java/org/apache/mina/filter/traffic/ReadThrottleFilter.java

Modified: 
mina/trunk/core/src/main/java/org/apache/mina/filter/traffic/ReadThrottleFilter.java
URL: 
http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/filter/traffic/ReadThrottleFilter.java?rev=594762&r1=594761&r2=594762&view=diff
==============================================================================
--- 
mina/trunk/core/src/main/java/org/apache/mina/filter/traffic/ReadThrottleFilter.java
 (original)
+++ 
mina/trunk/core/src/main/java/org/apache/mina/filter/traffic/ReadThrottleFilter.java
 Tue Nov 13 20:50:12 2007
@@ -19,6 +19,8 @@
  */
 package org.apache.mina.filter.traffic;
 
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.ScheduledFuture;
@@ -531,8 +533,24 @@
         if (resumeOthers) {
             int maxGlobalBufferSize = this.maxGlobalBufferSize;
             if (maxGlobalBufferSize == 0 || globalBufferSize.get() < 
maxGlobalBufferSize) {
+                List<IoService> inactiveServices = null;
                 for (IoService service: serviceBufferSizes.keySet()) {
                     resumeService(service);
+                    
+                    if (!service.isActive()) {
+                        if (inactiveServices == null) {
+                            inactiveServices = new ArrayList<IoService>();
+                        }
+                        inactiveServices.add(service);
+                    }
+                    
+                    // Remove inactive services from the map.
+                    if (inactiveServices != null) {
+                        for (IoService s: inactiveServices) {
+                            serviceBufferSizes.remove(s);
+                        }
+                    }
+
                     synchronized (globalResumeLock) {
                         lastGlobalResumeTime = System.currentTimeMillis();
                     }


Reply via email to