changeset 5878:64e24cc8e009

7188911: nightly failures after JSR 292 lazy method handle update (round 2) Reviewed-by: kvn, jrose
author twisti
date Tue, 07 Aug 2012 14:31:52 -0700
parents 050116960e99
children e1d063685dc8
files src/share/classes/java/lang/invoke/BoundMethodHandle.java src/share/classes/java/lang/invoke/MemberName.java
diffstat 2 files changed, 5 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/share/classes/java/lang/invoke/BoundMethodHandle.java	Tue Jul 24 10:47:44 2012 -0700
+++ b/src/share/classes/java/lang/invoke/BoundMethodHandle.java	Tue Aug 07 14:31:52 2012 -0700
@@ -411,11 +411,11 @@
             SpeciesData d = lookupCache(types);
             if (!d.isPlaceholder())
                 return d;
-            Class<? extends BoundMethodHandle> cbmh;
             synchronized (d) {
                 // Use synch. on the placeholder to prevent multiple instantiation of one species.
                 // Creating this class forces a recursive call to getForClass.
-                cbmh = Factory.generateConcreteBMHClass(types);
+                if (lookupCache(types).isPlaceholder())
+                    Factory.generateConcreteBMHClass(types);
             }
             // Reacquire cache lock.
             d = lookupCache(types);
--- a/src/share/classes/java/lang/invoke/MemberName.java	Tue Jul 24 10:47:44 2012 -0700
+++ b/src/share/classes/java/lang/invoke/MemberName.java	Tue Aug 07 14:31:52 2012 -0700
@@ -476,6 +476,7 @@
     }
     @SuppressWarnings("LeakingThisInConstructor")
     public MemberName(Method m, boolean wantSpecial) {
+        m.getClass();  // NPE check
         // fill in vmtarget, vmindex while we have m in hand:
         MethodHandleNatives.init(this, m);
         assert(isResolved() && this.clazz != null);
@@ -505,6 +506,7 @@
     /** Create a name for the given reflected constructor.  The resulting name will be in a resolved state. */
     @SuppressWarnings("LeakingThisInConstructor")
     public MemberName(Constructor<?> ctor) {
+        ctor.getClass();  // NPE check
         // fill in vmtarget, vmindex while we have ctor in hand:
         MethodHandleNatives.init(this, ctor);
         assert(isResolved() && this.clazz != null);
@@ -519,6 +521,7 @@
     }
     @SuppressWarnings("LeakingThisInConstructor")
     public MemberName(Field fld, boolean makeSetter) {
+        fld.getClass();  // NPE check
         // fill in vmtarget, vmindex while we have fld in hand:
         MethodHandleNatives.init(this, fld);
         assert(isResolved() && this.clazz != null);