[ 
https://issues.apache.org/jira/browse/HTTPCLIENT-731?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12562226#action_12562226
 ] 

Archie Cobbs commented on HTTPCLIENT-731:
-----------------------------------------

Bleh, forgot "task" is a Runnable, not a Thread. I'll attach a new patch 
shortly.


> 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.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]

Reply via email to