Hi, 

Please find below a fix for 8316580: HttpClient with StructuredTaskScope does 
not close when a task fails.

The problem here is a subtle reference release issue: Interrupting the 
VirtualThread means that the CompletableFuture returned by sendAsync is 
eligible for GC after having been cancelled, which in turn means that some of 
the intermediate operations that would have been completed before that CF was 
completed get eligible for being GC’ed too. One of these intermediate 
operations is the action that decrements the ref counting. Since the refcount 
isn’t decremented properly, the client won’t exit. 

Holding onto the CompletableFuture returned to the caller by 
HttpClient::sendAsync until that CompletableFuture gets completed from upstream 
fixes the issue.

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

Commit messages:
 - 8316580

Changes: https://git.openjdk.org/jdk/pull/15883/files
 Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=15883&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8316580
  Stats: 291 lines in 4 files changed: 275 ins; 2 del; 14 mod
  Patch: https://git.openjdk.org/jdk/pull/15883.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/15883/head:pull/15883

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

Reply via email to