You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hc.apache.org by "Roland Weber (JIRA)" <ji...@apache.org> on 2006/08/08 19:40:14 UTC

[jira] Commented: (HTTPCLIENT-596) read() on the stream returned by HttpMethod.getResponseBodyAsStream() cannot be simply canceled with Thread.interrupt

    [ http://issues.apache.org/jira/browse/HTTPCLIENT-596?page=comments#action_12426650 ] 
            
Roland Weber commented on HTTPCLIENT-596:
-----------------------------------------

Hello Arnaud,

we have no way of changing the behavior of native methods, or of any method built into Java. SocketInputStream is clearly not our responsibility.
You should try with different JVM implementations to find one that does not have this problem.

If you have an idea how we could "work around" this problem, we'll consider it. Otherwise, I suggest to mark this issue invalid.

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