hc-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Arnaud Masson (JIRA)" <j...@apache.org>
Subject [jira] Created: (HTTPCLIENT-596) read() on the stream returned by HttpMethod.getResponseBodyAsStream() cannot be simply canceled with Thread.interrupt
Date Tue, 08 Aug 2006 16:41:13 GMT
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