[ https://issues.apache.org/jira/browse/HTTPCLIENT-731?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Archie Cobbs updated HTTPCLIENT-731: ------------------------------------ Attachment: HTTPCLIENT-731.2.txt Attaching better version of patch. This patch also removes some unused code. > Interrupting a connecting HTTP request thread incorrectly becomes a timeout > exception > -------------------------------------------------------------------------------------- > > Key: HTTPCLIENT-731 > URL: https://issues.apache.org/jira/browse/HTTPCLIENT-731 > Project: HttpComponents HttpClient > Issue Type: Improvement > Components: HttpClient > Affects Versions: 3.1 Final > Environment: Java 1.5 Linux > Reporter: Archie Cobbs > Attachments: HTTPCLIENT-731.2.txt, HTTPCLIENT-731.txt > > > Consider this logic in {{TimeoutController.java}}: > {noformat} > public static void execute(Thread task, long timeout) throws > TimeoutException { > task.start(); > try { > task.join(timeout); > } catch (InterruptedException e) { > /* if somebody interrupts us he knows what he is doing */ > } > if (task.isAlive()) { > task.interrupt(); > throw new TimeoutException(); > } > } > {noformat} > The effect of this is that if thread A is in the middle of performing an HTTP > request and happens to be waiting for the socket to connect, and then thread > B interrupts thread A, thread A will throw a {{TimeoutException}}, even if > the actual timeout is far off in the future. > In other words, interrupting a requesting thread that happens to be waiting > for a socket to connect is incorrectly interpreted as a connection timeout, > which is incorrect. > In my application, this causes the client to incorrectly believe the server > is down, when in actuality some other part of the client is simply trying to > cancel an outstanding RPC request. > I realize that invoking {{HttpMethodBase.abort()}} would be a better way to > abort the RPC request and am working on refactoring my code to do that. > However, this "translation" of a thread interruption into a timeout event is > still incorrect. Furthermore, this behavior is undocumented AFAICT. > Suggestion for improvement: Convert thread interruptions into the equivalent > of {{abort()}} and document this behavior. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]