On Thu, 16 Mar 2023 21:25:44 GMT, Viktor Klang <d...@openjdk.org> wrote:

>> Addresses the situation where exceptional completion of `orTimeout`:ed 
>> CompletableFutures wouldn't cancel the timeout task which could lead to 
>> memory leaks if done frequently enough with long enough timeout durations.
>> 
>> Fix discussed with @DougLea
>
> Viktor Klang has updated the pull request incrementally with one additional 
> commit since the last revision:
> 
>   Making the test for orTimeout+completeExceptionally only based on 
> iterations and not duration.

Hello Viktor, the changes look good to me. Looking at the code, I see that this 
issue will also affect the `completeOnTimeout(...)` method on the 
`CompletableFuture`. Would you want to enhance the test to include a test for 
this method too? The following test method which tests this 
`completeOnTimeout()` reproduces the leak (and thus the OOM) without your fix:


@Test
    void testCompleteOnTimeoutWithCompleteExceptionallyDoesNotLeak() {
        var count = 0L;
        while(count < 2_000_000) {
            new CompletableFuture<>().completeOnTimeout(null, 12, 
TimeUnit.HOURS).completeExceptionally(new RuntimeException("This is fine"));
            ++count;

        }
    }

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

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

Reply via email to