[
https://issues.apache.org/jira/browse/FILEUPLOAD-136?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12513313
]
Maurice Codik Moscoso commented on FILEUPLOAD-136:
--------------------------------------------------
filed http://jira.codehaus.org/browse/JETTY-393
> 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
> 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]