[ 
http://issues.apache.org/jira/browse/HTTPCLIENT-596?page=comments#action_12426875
 ] 
            
Arnaud Masson commented on HTTPCLIENT-596:
------------------------------------------

Oleg,

1) I understand that the only way is to interrupt is to close the socket, but 
it should be *hidden from external code*.
To call abort() you must have a reference to the HttpMethod.
But the reference to a thread should be enough to cancel it ! Maybe the 
HttpMethod object is only referenced on the stack. 
Keeping that reference to the HttpMethod outside the working thread (just to be 
able to cancel) makes the code more complex and difficult to maintain.

2) Yes, it's HttpClient job to emulate behaviors that the JRE doesn't have.
Otherwise we would probably use the java.net.HttpURLConnection. :)

Why https://issues.apache.org/jira/browse/HTTPCLIENT-386 has been fixed and not 
this one ?
>From the caller point of view, it's almost  the same problem: interrupt() must 
>work.

I am disappointed because it is a real problem, even if it may not  be possible 
to fix it in the current version.
Will HttpClient 4 with NIO fix it ?



> read() on the stream returned by HttpMethod.getResponseBodyAsStream() cannot 
> be simply canceled with Thread.interrupt
> ---------------------------------------------------------------------------------------------------------------------
>
>                 Key: HTTPCLIENT-596
>                 URL: http://issues.apache.org/jira/browse/HTTPCLIENT-596
>             Project: HttpComponents HttpClient
>          Issue Type: Bug
>          Components: HttpClient
>    Affects Versions: 3.0 Final, 3.0.1
>         Environment: Windows XP
>            Reporter: Arnaud Masson
>
> I have a working thread that needs to download some big file with 
> HttpMethod.getResponseBodyAsStream().
> A swing component displays a progress indication and has a "stop" button.
> When the stop button is clicked by the user, I would like to stop the 
> download as soon as possible, so I call interrupt() on the working thread 
> from the EDT, which should throw an InterruptedException or 
> InterruptedIOException inside the working thread.
> But the read() operation on the stream returned by 
> HttpMethod.getResponseBodyAsStream() is not interrupted.
> The working thread stacktrace is:
>       SocketInputStream.socketRead0(FileDescriptor, byte[], int, int, int)  
> //<--------- blocking
>       SocketInputStream.read(byte[], int, int) line: 129      
>       BufferedInputStream.fill() line: 218    
>       BufferedInputStream.read() line: 235    
>       ChunkedInputStream.getChunkSizeFromInputStream(InputStream) line: 249   
>       ChunkedInputStream.nextChunk() line: 220        
>       ChunkedInputStream.read(byte[], int, int) line: 175     
>       AutoCloseInputStream(FilterInputStream).read(byte[], int, int) line: 
> 111        
>       AutoCloseInputStream.read(byte[], int, int) line: 107   
>       ...
> I know that  the JRE SocketInputStream doesn't support interrupt() but 
> HttpClient should hide this problem.
> A workaround is to use request.abort() but it should be possible to cancel a 
> thread without knowing on what it is blocked.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to