**Problem**
When using HTTP/1.1 with HttpClient, it was observed that requests configured 
with timeouts at build time fail with a HttpTimeoutException when they are 
redirected to a separate URI by a server (status code 3xx on first response). 
What should happen is that the second request response (so after receiving a 
3xx code) clears restarts the timer intially set. However, when 
`responseTimerEvent` is registered for the first time, it is not unregistered 
and cleared before starting a second timer.

**Solution**
This fix addresses the issue by calling `cancelTimer()` in `MultiExchange.java` 
whenever the `newRequest` reference is set to a non-null value after calling 
`responseFilters(response)` on the initial response received. This occurs in 
the case where a status code 3xx is received in the initial response. When 
`cancelTimer()` is called, it now unreferences `responseTimerEvent` after 
cancellation operations take place.

While the fix for the issue was relatively straight forward, the regression 
test is less so. I would point to to the comment located in 
`RedirectTimeoutTest:L119` for an explanation of the testing method.

-------------

Commit messages:
 - 8304701: Request with timeout aborts later in-flight request on HTTP/1.1 cxn

Changes: https://git.openjdk.org/jdk/pull/16689/files
 Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=16689&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8304701
  Stats: 177 lines in 2 files changed: 176 ins; 0 del; 1 mod
  Patch: https://git.openjdk.org/jdk/pull/16689.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/16689/head:pull/16689

PR: https://git.openjdk.org/jdk/pull/16689

Reply via email to