On Fri, 17 Mar 2023 05:49:45 GMT, Jaikiran Pai <j...@openjdk.org> wrote:

>> Massive parallel execution of parametrised CorpusTest junit tests revealed 
>> race condition in 
>> `ClassHierarchyImpl.CachedClassHierarchyResolver::getClassInfo`.
>> 
>> The race condition may skip calculation of the ClassHierarchyInfo. In this 
>> specific case it caused SegmentScope not being identified as an interface 
>> and verify error on assignability between declared method return type and 
>> actual returned type has been emitted by the test.
>> 
>> Proposed patch fixes the race condition in 
>> `ClassHierarchyImpl.CachedClassHierarchyResolver::getClassInfo`.
>> 
>> Please review.
>> 
>> Thank you,
>> Adam
>
> src/java.base/share/classes/jdk/internal/classfile/impl/ClassHierarchyImpl.java
>  line 133:
> 
>> 131:             //using NOPE to distinguish between null value and 
>> non-existent record in the cache
>> 132:             //this code is on JDK bootstrap critical path, so cannot 
>> use lambdas here
>> 133:             var res = resolvedCache.getOrDefault(classDesc, NOPE);
> 
> `resolvedCache` is a `Collections.synchronizedMap` backed by a `HashMap`. So 
> the `getOrDefault()` (internally) synchronizes on the `resolvedCache` 
> instance itself and thus this operation would be thread safe in context of 
> access to this cache in rest of this code. So what you propose here looks 
> good to me.

Thank you.

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

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

Reply via email to