On Fri, 25 Nov 2022 12:15:47 GMT, Daniel Fuchs <[email protected]> wrote:

>> The java/net/httpclient/SpecialHeadersTest.java test has been observed 
>> failing once, due to a selector thread still running after all operations 
>> had terminated. This change slightly alter the test logic to check the 
>> shared client only at the end of the test when all methods have been 
>> executed, and focussed the checks performed by a test method to the only 
>> clients that this method is using. This may or may not prevent the observed 
>> issue to ever reproducing, but should at least provide more information on 
>> where the selector manager thread is at the time it is observed running, 
>> should the test fail again:
>> the logic of the HttpClient should have woken up the selector when the last 
>> operation finished, which should have ensured a prompt termination of the 
>> thread.
>> In addition this change fixes a small race condition in the logic that 
>> attempts to decide if the selector is still alive: the selector should be 
>> considered alive until its run() method has been called and has exited (or 
>> Thread::start has thrown).
>
> Daniel Fuchs has updated the pull request with a new target base due to a 
> merge or a rebase. The incremental webrev excludes the unrelated changes 
> brought in by the merge/rebase. The pull request contains five additional 
> commits since the last revision:
> 
>  - Merge branch 'master' into SpecialHeadersTest-8297200
>  - Update test/jdk/java/net/httpclient/ReferenceTracker.java
>    
>    Co-authored-by: Andrey Turbanov <[email protected]>
>  - Fixed race condition in detecting if selector is still alive
>  - 8297200
>  - 8297200

test/jdk/java/net/httpclient/SpecialHeadersTest.java line 478:

> 476:                 if (!sameClient || client == null) {
> 477:                     client = newHttpClient("testAsync", sameClient);
> 478:                     tracker = TRACKER.getTracker(client);

Should this be outside this `if` block? Otherwise, in its current form, I think 
this `tracker` can be `null` and then later in this test where we do 
`TRACKER.check(tracker, ...)`, I believe it will lead to an NPE inside the 
`check` implementation.

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

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

Reply via email to