# HG changeset patch # User twisti # Date 1344375112 25200 # Node ID 64e24cc8e00965176f1531f662e64264582c233a # Parent 050116960e996580f3563a3b1de303cc5774a735 7188911: nightly failures after JSR 292 lazy method handle update (round 2) Reviewed-by: kvn, jrose diff -r 050116960e99 -r 64e24cc8e009 src/share/classes/java/lang/invoke/BoundMethodHandle.java --- 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 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); diff -r 050116960e99 -r 64e24cc8e009 src/share/classes/java/lang/invoke/MemberName.java --- 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);