[ https://issues.apache.org/jira/browse/FILEUPLOAD-136?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Jochen Wiedmann resolved FILEUPLOAD-136. ---------------------------------------- Resolution: Won't Fix Assignee: Jochen Wiedmann I can follow your arguments, but I do not intend to change the code for that reason. > FileUpload race condition with used with Jetty 6 > ------------------------------------------------ > > Key: FILEUPLOAD-136 > URL: https://issues.apache.org/jira/browse/FILEUPLOAD-136 > Project: Commons FileUpload > Issue Type: Bug > Affects Versions: 1.2 > Environment: Running on Windows XP SP2 with Jetty 6 embedded and > Firefox 2.0.0.4 > Reporter: Keith Kowalczykowski > Assignee: Jochen Wiedmann > Priority: Critical > Attachments: FileUploadTest.zip, TestJetty.java > > > When running commons file upload with Jetty 6, ServletFileUpload.parseRequest > spins and never returns when the user clicks the "stop" button in their > browser while an upload is in progress. > Reproduction Steps: > * Create a simple servlet / html form which accepts a file upload using > commons file upload (or use the example code below). > * Upload a sufficiently large file that you have time to click the stop > button before the upload completes. > * Observe that the thread is now stuck within file upload. > Other Information: > Using jstack, I was able to get the following trace of where it is blocking. > It looks like it is on a read() call that file upload is making. > at org/mortbay/jetty/HttpParser$Input.blockForContent(HttpParser.java:922) > at org/mortbay/jetty/HttpParser$Input.read(HttpParser.java:897) > at > org/apache/commons/fileupload/MultipartStream$ItemInputStream.makeAvailable(MultipartStream.java:959) > at > org/apache/commons/fileupload/MultipartStream$ItemInputStream.close(MultipartStream.java:910) > at org/apache/commons/fileupload/util/Streams.copy(Streams.java:119) > at org/apache/commons/fileupload/util/Streams.copy(Streams.java:64) > at > org/apache/commons/fileupload/FileUploadBase.parseRequest(FileUploadBase.java:354) > at > org/apache/commons/fileupload/servlet/ServletFileUpload.parseRequest(ServletFileUpload.java:126) > at test/Main$1.handle(Main.java:43) > at > org/mortbay/jetty/handler/HandlerWrapper.handle(HandlerWrapper.java:139) > at org/mortbay/jetty/Server.handle(Server.java:285) > at org/mortbay/jetty/HttpConnection.handleRequest(HttpConnection.java:502) > at > org/mortbay/jetty/HttpConnection$RequestHandler.content(HttpConnection.java:835) > at org/mortbay/jetty/HttpParser.parseNext(HttpParser.java:641) > at org/mortbay/jetty/HttpParser.parseAvailable(HttpParser.java:208) > at org/mortbay/jetty/HttpConnection.handle(HttpConnection.java:378) > at > org/mortbay/jetty/bio/SocketConnector$Connection.run(SocketConnector.java:226) > at > org/mortbay/thread/BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:442) > at jrockit/vm/RNI.c2java(IIII)V(Native Method) > -- end of trac > Originally I thought this was an issue with our code, however, I have since > isolated it to a simple test case. Bellow is a class file called Main which > when run will instantiate an instance of Jetty on port 8080 and an HTML > document that will post a file upload to the servlet. When the stop button is > pressed, you will see that the line "Starting processing" is printed, but > neither the "Exception occured in processing" or "Processing completed" are > printed. I have a full eclipse project (jars and all) on my machine that I > was planning on uploading with this ticket, however, I don't see a way to > attach a file. Therefore, I have copied and pasted the two files bellow. Let > me know if you want the full project. > === Main.java === > /** > * > */ > package test; > import java.io.IOException; > import java.util.List; > import javax.servlet.ServletException; > import javax.servlet.http.HttpServletRequest; > import javax.servlet.http.HttpServletResponse; > import org.apache.commons.fileupload.FileItem; > import org.apache.commons.fileupload.disk.DiskFileItemFactory; > import org.apache.commons.fileupload.servlet.ServletFileUpload; > import org.mortbay.jetty.Handler; > import org.mortbay.jetty.Server; > import org.mortbay.jetty.handler.AbstractHandler; > /** > * @author Keith Kowalczykowski > * > */ > public class Main { > public static void main(String[] args) { > Handler handler = new AbstractHandler() { > public void handle(String arg0, HttpServletRequest arg1, > HttpServletResponse arg2, int arg3) > throws IOException, > ServletException > { > System.out.println("Starting processing"); > try > { > // Create a factory for disk-based > file items > DiskFileItemFactory factory = new > DiskFileItemFactory(); > > // Create a new file upload handler > ServletFileUpload upload = new > ServletFileUpload(factory); > > // Parse the request > List items = upload.parseRequest(arg1); > for (int i = 0; i < items.size(); i++) > { > FileItem file_item = (FileItem) items.get(i); > > System.out.println("Field Name: " + > file_item.getFieldName()); > } > } > catch (Exception e) > { > e.printStackTrace(); > System.out.println("Exception occured > in processing"); > } > finally > { > System.out.println("Processing > completed"); > } > } > }; > try > { > Server server = new Server(8080); > server.setHandler(handler); > server.start(); > } > catch (Exception e) > { > > } > } > } > === HTML Document === > <html> > <head> > </head> > <body> > <form name="test" action="http://localhost:8080/" method="post" > enctype="multipart/form-data"> > <input type="file" name="fileupload"/> > <input type="submit"/> > </form> > </body> > </html> -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]