hc-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Roland Weber (JIRA)" <j...@apache.org>
Subject [jira] Commented: (HTTPCLIENT-596) read() on the stream returned by HttpMethod.getResponseBodyAsStream() cannot be simply canceled with Thread.interrupt
Date Tue, 08 Aug 2006 18:46:15 GMT
    [ http://issues.apache.org/jira/browse/HTTPCLIENT-596?page=comments#action_12426675 ] 
            
Roland Weber commented on HTTPCLIENT-596:
-----------------------------------------

Hello Arnaud,

NIO is not an option for HttpClient, which is JDK 1.2 compatible. Oleg is working on NIO support
for HttpComponents (4.0).

Starting an extra thread for each request sounds like a lot of overhead to fix a problem which
most people don't have.
You can run an extra thread in your application, can't you?

cheers,
  Roland


> 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: httpclient-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: httpclient-dev-help@jakarta.apache.org


Mime
View raw message