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 2008/03/12 10:45:34 UTC

svn commit: r636265 - in /mina/ftpserver/trunk/core/src: main/java/org/apache/ftpserver/ main/java/org/apache/ftpserver/command/ test/java/org/apache/ftpserver/ftplet/

Author: ngn
Date: Wed Mar 12 02:45:20 2008
New Revision: 636265

URL: http://svn.apache.org/viewvc?rev=636265&view=rev
Log:
Fixed race condition where a session would not be closed before the client could send the next command (e.g. on Ftplet disconnect)

Modified:
    mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/FtpHandler.java
    mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/APPE.java
    mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/DELE.java
    mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/MKD.java
    mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/PASS.java
    mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/QUIT.java
    mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/RETR.java
    mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/RMD.java
    mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/RNTO.java
    mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/SITE.java
    mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/STOR.java
    mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/STOU.java
    mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/USER.java
    mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/ftplet/FtpLetThrowIOExceptionTest.java

Modified: mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/FtpHandler.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/FtpHandler.java?rev=636265&r1=636264&r2=636265&view=diff
==============================================================================
--- mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/FtpHandler.java (original)
+++ mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/FtpHandler.java Wed Mar 12 02:45:20 2008
@@ -59,7 +59,7 @@
     public void exceptionCaught( IoSession session, Throwable cause ) throws Exception
     {
     	LOG.error("Exception caught, closing session", cause);
-    	session.closeOnFlush();
+    	session.closeOnFlush().awaitUninterruptibly(10000);
     }
 
     @Override
@@ -106,6 +106,7 @@
     @Override
     public void sessionIdle( IoSession session, IdleStatus status ) throws Exception
     {
-        session.closeOnFlush();
+    	LOG.info("Session idle, closing");
+        session.closeOnFlush().awaitUninterruptibly(10000);
     }
 }

Modified: mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/APPE.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/APPE.java?rev=636265&r1=636264&r2=636265&view=diff
==============================================================================
--- mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/APPE.java (original)
+++ mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/APPE.java Wed Mar 12 02:45:20 2008
@@ -99,7 +99,7 @@
                 return;
             }
             else if(ftpletRet == FtpletEnum.RET_DISCONNECT) {
-                session.closeOnFlush();
+                session.closeOnFlush().awaitUninterruptibly(10000);
                 return;
             }
             
@@ -193,7 +193,7 @@
                     ftpletRet = FtpletEnum.RET_DISCONNECT;
                 }
                 if(ftpletRet == FtpletEnum.RET_DISCONNECT) {
-                    session.closeOnFlush();
+                    session.closeOnFlush().awaitUninterruptibly(10000);
                     return;
                 }
 

Modified: mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/DELE.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/DELE.java?rev=636265&r1=636264&r2=636265&view=diff
==============================================================================
--- mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/DELE.java (original)
+++ mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/DELE.java Wed Mar 12 02:45:20 2008
@@ -76,7 +76,7 @@
             return;
         }
         else if(ftpletRet == FtpletEnum.RET_DISCONNECT) {
-            session.closeOnFlush();
+            session.closeOnFlush().awaitUninterruptibly(10000);
             return;
         }
 
@@ -123,7 +123,7 @@
                 ftpletRet = FtpletEnum.RET_DISCONNECT;
             }
             if(ftpletRet == FtpletEnum.RET_DISCONNECT) {
-                session.closeOnFlush();
+                session.closeOnFlush().awaitUninterruptibly(10000);
                 return;
             }
 

Modified: mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/MKD.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/MKD.java?rev=636265&r1=636264&r2=636265&view=diff
==============================================================================
--- mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/MKD.java (original)
+++ mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/MKD.java Wed Mar 12 02:45:20 2008
@@ -78,7 +78,7 @@
             return;
         }
         else if(ftpletRet == FtpletEnum.RET_DISCONNECT) {
-            session.closeOnFlush();
+            session.closeOnFlush().awaitUninterruptibly(10000);
             return;
         }
         
@@ -128,7 +128,7 @@
                 ftpletRet = FtpletEnum.RET_DISCONNECT;
             }
             if(ftpletRet == FtpletEnum.RET_DISCONNECT) {
-                session.closeOnFlush();
+                session.closeOnFlush().awaitUninterruptibly(10000);
                 return;
             }
 

Modified: mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/PASS.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/PASS.java?rev=636265&r1=636264&r2=636265&view=diff
==============================================================================
--- mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/PASS.java (original)
+++ mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/PASS.java Wed Mar 12 02:45:20 2008
@@ -169,7 +169,7 @@
                     ftpletRet = FtpletEnum.RET_DISCONNECT;
                 }
                 if(ftpletRet == FtpletEnum.RET_DISCONNECT) {
-                    session.closeOnFlush();
+                    session.closeOnFlush().awaitUninterruptibly(10000);
                     return;
                 } else if(ftpletRet == FtpletEnum.RET_SKIP) {
                     success = false;
@@ -194,7 +194,7 @@
                 int maxAllowedLoginFailues = conManager.getMaxLoginFailures(); 
                 if(maxAllowedLoginFailues != 0 && 
                         session.getFailedLogins() >= maxAllowedLoginFailues) {
-                    session.closeOnFlush();
+                    session.closeOnFlush().awaitUninterruptibly(10000);
                 }
                 
                 return;

Modified: mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/QUIT.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/QUIT.java?rev=636265&r1=636264&r2=636265&view=diff
==============================================================================
--- mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/QUIT.java (original)
+++ mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/QUIT.java Wed Mar 12 02:45:20 2008
@@ -45,7 +45,7 @@
         session.resetState();
         session.write(FtpReplyUtil.translate(session, request, context, FtpReply.REPLY_221_CLOSING_CONTROL_CONNECTION, "QUIT", null));
 		
-        session.closeOnFlush();
+        session.closeOnFlush().awaitUninterruptibly(10000);
     }
 
 }

Modified: mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/RETR.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/RETR.java?rev=636265&r1=636264&r2=636265&view=diff
==============================================================================
--- mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/RETR.java (original)
+++ mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/RETR.java Wed Mar 12 02:45:20 2008
@@ -89,7 +89,7 @@
                 return;
             }
             else if(ftpletRet == FtpletEnum.RET_DISCONNECT) {
-                session.closeOnFlush();
+                session.closeOnFlush().awaitUninterruptibly(10000);
                 return;
             }
             
@@ -196,7 +196,7 @@
                     ftpletRet = FtpletEnum.RET_DISCONNECT;
                 }
                 if(ftpletRet == FtpletEnum.RET_DISCONNECT) {
-                    session.closeOnFlush();
+                    session.closeOnFlush().awaitUninterruptibly(10000);
                     return;
                 }
 

Modified: mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/RMD.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/RMD.java?rev=636265&r1=636264&r2=636265&view=diff
==============================================================================
--- mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/RMD.java (original)
+++ mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/RMD.java Wed Mar 12 02:45:20 2008
@@ -77,7 +77,7 @@
             return;
         }
         else if(ftpletRet == FtpletEnum.RET_DISCONNECT) {
-            session.closeOnFlush();
+            session.closeOnFlush().awaitUninterruptibly(10000);
             return;
         }
         
@@ -127,7 +127,7 @@
                 ftpletRet = FtpletEnum.RET_DISCONNECT;
             }
             if(ftpletRet == FtpletEnum.RET_DISCONNECT) {
-                session.closeOnFlush();
+                session.closeOnFlush().awaitUninterruptibly(10000);
                 return;
             }
 

Modified: mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/RNTO.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/RNTO.java?rev=636265&r1=636264&r2=636265&view=diff
==============================================================================
--- mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/RNTO.java (original)
+++ mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/RNTO.java Wed Mar 12 02:45:20 2008
@@ -74,7 +74,7 @@
                 return;
             }
             else if(ftpletRet == FtpletEnum.RET_DISCONNECT) {
-                session.closeOnFlush();
+                session.closeOnFlush().awaitUninterruptibly(10000);
                 return;
             }
             
@@ -126,7 +126,7 @@
                     ftpletRet = FtpletEnum.RET_DISCONNECT;
                 }
                 if(ftpletRet == FtpletEnum.RET_DISCONNECT) {
-                    session.closeOnFlush();
+                    session.closeOnFlush().awaitUninterruptibly(10000);
                     return;
                 }
             }

Modified: mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/SITE.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/SITE.java?rev=636265&r1=636264&r2=636265&view=diff
==============================================================================
--- mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/SITE.java (original)
+++ mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/SITE.java Wed Mar 12 02:45:20 2008
@@ -66,7 +66,7 @@
             return;
         }
         else if(ftpletRet == FtpletEnum.RET_DISCONNECT) {
-            session.closeOnFlush();
+            session.closeOnFlush().awaitUninterruptibly(10000);
             return;
         }
         

Modified: mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/STOR.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/STOR.java?rev=636265&r1=636264&r2=636265&view=diff
==============================================================================
--- mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/STOR.java (original)
+++ mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/STOR.java Wed Mar 12 02:45:20 2008
@@ -100,7 +100,7 @@
                 return;
             }
             else if(ftpletRet == FtpletEnum.RET_DISCONNECT) {
-                session.closeOnFlush();
+                session.closeOnFlush().awaitUninterruptibly(10000);
                 return;
             }
             
@@ -177,7 +177,7 @@
                     ftpletRet = FtpletEnum.RET_DISCONNECT;
                 }
                 if(ftpletRet == FtpletEnum.RET_DISCONNECT) {
-                    session.closeOnFlush();
+                    session.closeOnFlush().awaitUninterruptibly(10000);
                     return;
                 }
 

Modified: mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/STOU.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/STOU.java?rev=636265&r1=636264&r2=636265&view=diff
==============================================================================
--- mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/STOU.java (original)
+++ mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/STOU.java Wed Mar 12 02:45:20 2008
@@ -90,7 +90,7 @@
                 return;
             }
             else if(ftpletRet == FtpletEnum.RET_DISCONNECT) {
-                session.closeOnFlush();
+                session.closeOnFlush().awaitUninterruptibly(10000);
                 return;
             }
             
@@ -192,7 +192,7 @@
                     ftpletRet = FtpletEnum.RET_DISCONNECT;
                 }
                 if(ftpletRet == FtpletEnum.RET_DISCONNECT) {
-                    session.closeOnFlush();
+                    session.closeOnFlush().awaitUninterruptibly(10000);
                     return;
                 }
 

Modified: mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/USER.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/USER.java?rev=636265&r1=636264&r2=636265&view=diff
==============================================================================
--- mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/USER.java (original)
+++ mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/USER.java Wed Mar 12 02:45:20 2008
@@ -142,7 +142,7 @@
 
             // if not ok - close connection
             if(!success) {
-                session.closeOnFlush();
+                session.closeOnFlush().awaitUninterruptibly(10000);
             }
         }
     }

Modified: mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/ftplet/FtpLetThrowIOExceptionTest.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/ftplet/FtpLetThrowIOExceptionTest.java?rev=636265&r1=636264&r2=636265&view=diff
==============================================================================
--- mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/ftplet/FtpLetThrowIOExceptionTest.java (original)
+++ mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/ftplet/FtpLetThrowIOExceptionTest.java Wed Mar 12 02:45:20 2008
@@ -19,9 +19,11 @@
 
 package org.apache.ftpserver.ftplet;
 
+import java.io.IOException;
+
 
 public class FtpLetThrowIOExceptionTest extends FtpLetThrowFtpExceptionTest {
-    protected void throwException() {
-        throw new RuntimeException();
+    protected void throwException() throws IOException {
+        throw new IOException();
     }
 }