RFR: 8172048: Re-examine use of AtomicReference in java.security.Policy

Claes Redestad claes.redestad at oracle.com
Mon Jan 2 11:25:16 UTC 2017


<dropped security-libs>

Hi Peter,

agreed, it appears this assert could be replaced by a test - similar to 
what was already
done for VarHandle.AccessMode[1] - which might increase robustness of 
early use of
VarHandles and give our core reflection libraries the freedom to use 
VarHandles.

Paul?

/Claes

[1] https://bugs.openjdk.java.net/browse/JDK-8160439

On 12/28/2016 01:07 AM, Peter Levart wrote:
> Hi Claes,
>
> A nice find! This is certainly a straightforward and low-risk fix for 
> breaking the initialization cycle problem with JDK-8062389.
>
> Related to VarHandles, the call trace of the initialization cycle also 
> includes the following part of code in VarHandle:
>
>
>         AccessMode(final String methodName, AccessType at) {
>             this.methodName = methodName;
>             this.at = at;
>
>             // Assert that return type is correct
>             // Otherwise, when disabled avoid using reflection
>             assert at.returnType == getReturnType(methodName);
>         }
>
> ...
>
>         private static Class<?> getReturnType(String name) {
>             try {
>                 Method m = VarHandle.class.getMethod(name, 
> Object[].class);
>                 return m.getReturnType();
>             }
>             catch (Exception e) {
>                 throw newInternalError(e);
>             }
>         }
>
>
> ... where enabling assertions (tests enable assertions) causes the 
> initialization of VarHandle(s) to involve reflection. This is also a 
> place that could be made more robust, perhaps by devising a special 
> test that verifies method return types, instead of embedding the check 
> into the AccessMode constructor...
>
> Regards, Peter
>
>
> On 12/27/2016 03:04 PM, Claes Redestad wrote:
>> Hi,
>>
>> since java.util.concurrent.AtomicReference was changed to use a
>> VarHandle internally, using it from within the security libraries can
>> lead to hard to diagnose bootstrap cycles (since VarHandles has to do
>> doPrivileged calls during setup). The need to initialize VarHandles is
>> also cause for a small startup regression for any application run with
>> a security manager.
>>
>> The use of AtomicReference in java.security.Policy is not really
>> motivated, though, since only the .get/.set methods are used, thus a
>> rather straight-forward fix is to convert the code to use a volatile
>> reference instead with identical semantics:
>>
>> Bug: https://bugs.openjdk.java.net/browse/JDK-8172048
>> Webrev: http://cr.openjdk.java.net/~redestad/8172048/webrev.01/
>>
>> While a rather insignificant startup improvement in and off itself,
>> this would help to unblock the attempted fix to resolve
>> https://bugs.openjdk.java.net/browse/JDK-8062389
>>
>> Thanks!
>>
>> /Claes
>



More information about the core-libs-dev mailing list