[+core-libs-dev, Alexey]

On Tue, Nov 4, 2014 at 2:13 AM, Paul Sandoz <paul.san...@oracle.com> wrote:
> Hi Martin,
>
> Should this and the other review also be posted on core-libs?

 (sorry for forgetting the mailing list)

> On Nov 3, 2014, at 11:18 PM, Martin Buchholz <marti...@google.com> wrote:
>
>> Hi Joe, Paul,
>>
>> I'd like you to do a code review.
>>
>> http://cr.openjdk.java.net/~martin/webrevs/openjdk9/reflection-final-fields/
>> https://bugs.openjdk.java.net/browse/JDK-8062771
>
> Kind of scary.
>
> I suspect the fix JDK-8016236 also fixed this bug because the field 
> GenericInfo.genericInfo was made volatile, which stamped in a barrier 
> ensuring the publication was safe and the AbstractRepository.factory was not 
> null. If my suspicions are correct it might be worth adding that analysis to 
> the test (plus it might be easy to verify in your environment).

I was misled by the synopsis of
JDK-8016236  Class.getGenericInterfaces performance improvement
because it's a correctness fix as well as a performance improvement.

I recommend y'all do a little correctness backport to jdk7 Class.java
as follows:

@@ -2450,7 +2450,7 @@
     private native String getGenericSignature();

     // Generic info repository; lazily initialized
-    private transient ClassRepository genericInfo;
+    private volatile transient ClassRepository genericInfo;

     // accessor for factory
     private GenericsFactory getFactory() {
@@ -2460,11 +2460,13 @@

     // accessor for generic info repository
     private ClassRepository getGenericInfo() {
+        ClassRepository genericInfo = this.genericInfo;
         // lazily initialize repository if necessary
         if (genericInfo == null) {
             // create and cache generic info repository
             genericInfo = ClassRepository.make(getGenericSignature(),
                                                getFactory());
+            this.genericInfo = genericInfo;
         }
         return genericInfo; //return cached repository
     }

> Using final fields where at all possible is a good cleanup.

Right.  (even though this change fixes no known bug ... in openjdk9)

> Is it possible to make EmptyClass be a static inner class of the test? IIUC 
> if its enclosed within ThreadSafety it should still work with URLClassLoader.

Done.  Webrev regenerated.

Reply via email to