[ http://issues.apache.org/jira/browse/HTTPCLIENT-596?page=comments#action_12426864 ] Ortwin Glück commented on HTTPCLIENT-596: -----------------------------------------
Arnaud, It's a known fact, that (Sun's) sockets don't react to Thread.interrupt(). The only (?) way to cancel the read is to close the socket from a different thread. That's what our abort() method effectively does. > 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]