[ https://issues.apache.org/jira/browse/NET-460?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Sebb resolved NET-460. ---------------------- Resolution: Duplicate > _retrieveFile() blocks calling thread, on FTP I/O till the time file transfer > is complete > ----------------------------------------------------------------------------------------- > > Key: NET-460 > URL: https://issues.apache.org/jira/browse/NET-460 > Project: Commons Net > Issue Type: Improvement > Components: FTP > Affects Versions: 3.1 > Environment: linux/windows > Reporter: Agent Vinod > Labels: newbie, patch > > The Function _retrieveFile in file: FTPClient.java , does not respond to > interrupts from calling thread. > For Example: > A Basic FTP Client Application has 1 Main (Parent) Thread and 1 Child Thread. > Main (Parent) thread handles all functions except the FtpClient > download/upload. > Child Thread handles only FtpClient related functions mainly > (_retrieveFile()) etc. > Steps to reproduce: > 1) Main Thread has initiated child Thread . > 2) Child thread is presently downloading a file using _retrieveFile(String > command, String remote, OutputStream local) . > 3) After some time, Main Thread fires Interrupt on child Thread to stop( > Abort) download. > Expected behavior: > Child Thread immediately aborts download and dies. > Observed behavior: > Child Thread blocks on retrieveFile(String command, String remote, > OutputStream local) till the file finishes download. > Only after this ,does the Child thread respond to any interrupt from Parent > Thread. > My Workaround: > file: FTPClient.java > Class: FTPClient > Step 1: declare private Socket mySocket; > Step 2: In the function : protected boolean _retrieveFile(String command, > String remote, OutputStream local) throws IOException{} > Comment out: Socket socket; > and instead use: mySocket ( declared as global in step1) > Step 3: In the function : public boolean abort() throws IOException > Add a statement: Util.closeQuietly(mySocket); > before the statement: return FTPReply.isPositiveCompletion(abor()); > This way, every time the Main Thread calls abort(), the download active and > blocked on mySocket in _retrieveFile() is immediately interrupted and stopped. > raising an immediate Exception and thus stopping the Child thread (of course > one needs to catch this exception properly). > I am not sure if this is the right way of doing it and am afraid if this > breaks something else. > Requesting the core developers to look into a better solution to this > workaround. > thank -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa For more information on JIRA, see: http://www.atlassian.com/software/jira