[ 
http://issues.apache.org/jira/browse/HTTPCLIENT-596?page=comments#action_12426894
 ] 
            
Ortwin Glück commented on HTTPCLIENT-596:
-----------------------------------------

Arnaud,

Of course aborting a composite operation requires knowledge about the state of 
the operation. You may need to rollback transactions, free resources correctly, 
shutdown channels gracefully etc. I stick to my prior statement, that just 
relying on Thread.interrupt() is a Bad Thing (tm), because this method does not 
have well-defined semantics.

Implementing a bloody Thread pool for this feature sounds like a lot of error 
prone (thread leaks anyone?) work to me, which I don't want to do. It's not 
worth the hassle IMHO, simply because the caller (that's you) can handle the 
situation much cleaner. If however you feel very strong about it, please submit 
a patch, so everybody can review the impact. Otherwise I consider this issue as 
done with.

> 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