RFR 8174954: Parameter target type is allowed access after a module read edge or a package export has occurred after failed resolution

David Holmes david.holmes at oracle.com
Fri Oct 20 05:15:33 UTC 2017


Hi Harold,

On 19/10/2017 12:20 AM, harold seigel wrote:
> Hi David,
> 
> Thanks for looking at this.
> 
> Please see inline comments.
> 
> Thanks, Harold
> 
> 
> On 10/17/2017 10:22 PM, David Holmes wrote:
>> Hi Harold,
>>
>> On 17/10/2017 12:20 AM, harold seigel wrote:
>>> Hi,
>>>
>>> Please review this new JDK-10 fix for bug JDK-8174954.  If the 
>>> initial resolution attempt fails with a LinkageError exception then 
>>> the fix saves the exception in the resolution_errors table and sets a 
>>> flag in the constant pool Cache, indicating the failure.  Subsequent 
>>> attempts to do the same resolution will see that the flag is set, 
>>> retrieve the exception from the resolution_errors table, and throw 
>>> it, instead of re-trying the resolution.
>>
>> I'm a little confused. The fix seems all about indy, which seems to be 
>> the topic of:
>>
>>  JDK-8174942 Bootstrap Method Called Multiple Times Despite Initial 
>> Resolution Failure
>>
>> whereas this bug seems to be about a more general problem. Is this fix 
>> addressing both issues??
> Thanks for noticing this.  This fix addresses both bugs.  The sample 
> program for 8174942 is one of the test cases for this fix.  I'll close 
> 8174942 as a duplicate.

I'm still somewhat confused as it seems that all the substantive changes 
here have the word "indy" in them. What part of the change actually 
fixes the non-indy issue tested by MethodAccessReadTwice.java?

Thanks,
David
>>
>> BTW there's no reason for JDK-8174954 to remain confidential.
> Agreed.  I opened the bug.
>>
>> Thanks,
>> David
>>
>>> The fix also prevents a race condition if two or more threads try to 
>>> do the same resolution concurrently. When a thread tries to record 
>>> the result of its resolution attempt, it will check to see if another 
>>> thread recorded its result first.  If so, then it will use the result 
>>> recorded by the other thread.  Otherwise, it will record and use its 
>>> result. Access to the resolution result is protected by the 
>>> 'resolved_references' lock.
>>>
>>> Open webrev: http://cr.openjdk.java.net/~hseigel/bug_8174954.1/webrev/
>>>
>>> JBS Bug: https://bugs.openjdk.java.net/browse/JDK-8174954
>>>
>>> The fix was tested with the JCK Lang and VM tests, the JTreg hotspot, 
>>> java/io, java/lang, java/util, and other tests, the co-located NSK 
>>> tests, JPRT, with Mach5 tier2 - tier5 tests, and by hand to check 
>>> race condition handling.
>>>
>>> Thanks, Harold
>>>
> 


More information about the hotspot-runtime-dev mailing list