You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by ng...@apache.org on 2011/08/29 22:24:14 UTC

svn commit: r1162981 - /mina/ftpserver/branches/1.0.x/core/src/main/java/org/apache/ftpserver/impl/PassivePorts.java

Author: ngn
Date: Mon Aug 29 20:24:14 2011
New Revision: 1162981

URL: http://svn.apache.org/viewvc?rev=1162981&view=rev
Log:
Reserving passive port might remove an unused port from freeList, causing starvation of passive ports (FTPSERVER-424)

Modified:
    mina/ftpserver/branches/1.0.x/core/src/main/java/org/apache/ftpserver/impl/PassivePorts.java

Modified: mina/ftpserver/branches/1.0.x/core/src/main/java/org/apache/ftpserver/impl/PassivePorts.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/branches/1.0.x/core/src/main/java/org/apache/ftpserver/impl/PassivePorts.java?rev=1162981&r1=1162980&r2=1162981&view=diff
==============================================================================
--- mina/ftpserver/branches/1.0.x/core/src/main/java/org/apache/ftpserver/impl/PassivePorts.java (original)
+++ mina/ftpserver/branches/1.0.x/core/src/main/java/org/apache/ftpserver/impl/PassivePorts.java Mon Aug 29 20:24:14 2011
@@ -47,7 +47,7 @@ public class PassivePorts {
 
     private static final Integer MAX_PORT_INTEGER = Integer.valueOf(MAX_PORT);
 
-    private List<Integer> freeList;
+    private Set<Integer> freeList;
 
     private Set<Integer> usedList;
 
@@ -158,7 +158,7 @@ public class PassivePorts {
         	passivePorts.add(0);
         }
 
-        this.freeList = new ArrayList<Integer>(passivePorts);
+        this.freeList = new HashSet<Integer>(passivePorts);
         this.usedList = new HashSet<Integer>(passivePorts.size());
 
         this.checkIfBound = checkIfBound;
@@ -215,12 +215,12 @@ public class PassivePorts {
 
             } else if (checkPortUnbound(ret)) {
                 // Not used by someone else, so lets reserve it and return it
-                freeList.remove(i);
+                freeList.remove(ret);
                 usedList.add(ret);
                 return ret;
 
             } else {
-            	freeCopy.remove(i);
+            	freeCopy.remove(ret);
                 // log port unavailable, but left in pool
                 log.warn("Passive port in use by another process: " + ret);
             }