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]