8236647: Correct Fix for 8236647: java/lang/invoke/CallSiteTest.java failed with InvocationTargetException in Graal mode

Reviewed-by: kvn, never
This commit is contained in:
Bob Vandette 2020-06-29 15:25:16 +00:00
parent 97cdfb92f8
commit d16ea55b62

@ -65,25 +65,21 @@ abstract class HotSpotObjectConstantImpl implements HotSpotObjectConstant {
@Override
public abstract int getIdentityHashCode();
static class Fields {
// Initializing these too early causes a hang, so do it here in a subclass
static final HotSpotResolvedJavaField callSiteTargetField = HotSpotMethodHandleAccessProvider.Internals.instance().callSiteTargetField;
static final HotSpotResolvedJavaField constantCallSiteFrozenField = HotSpotMethodHandleAccessProvider.Internals.instance().constantCallSiteFrozenField;
}
private boolean isFullyInitializedConstantCallSite() {
if (!runtime().getConstantCallSite().isInstance(this)) {
return false;
}
// read ConstantCallSite.isFrozen as a volatile field
boolean isFrozen = readFieldValue(Fields.constantCallSiteFrozenField, true /* volatile */).asBoolean();
HotSpotResolvedJavaField field = HotSpotMethodHandleAccessProvider.Internals.instance().constantCallSiteFrozenField;
boolean isFrozen = readFieldValue(field, true /* volatile */).asBoolean();
// isFrozen true implies fully-initialized
return isFrozen;
}
private HotSpotObjectConstantImpl readTarget() {
// read CallSite.target as a volatile field
return (HotSpotObjectConstantImpl) readFieldValue(Fields.callSiteTargetField, true /* volatile */);
HotSpotResolvedJavaField field = HotSpotMethodHandleAccessProvider.Internals.instance().callSiteTargetField;
return (HotSpotObjectConstantImpl) readFieldValue(field, true /* volatile */);
}
@Override