< prev index next >
src/java.base/share/classes/java/lang/invoke/MethodHandle.java
Print this page
8145371: ClassCastException thrown in LambdaFormEditor.getInCache
Reviewed-by: mhaupt
*** 1658,1674 ****
/*non-public*/
void updateForm(LambdaForm newForm) {
assert(newForm.customized == null || newForm.customized == this);
if (form == newForm) return;
newForm.prepare(); // as in MethodHandle.<init>
! UNSAFE.putObject(this, FORM_OFFSET, newForm);
! UNSAFE.fullFence();
}
/** Craft a LambdaForm customized for this particular MethodHandle */
/*non-public*/
void customize() {
if (form.customized == null) {
LambdaForm newForm = form.customize(this);
updateForm(newForm);
} else {
assert(form.customized == this);
--- 1658,1674 ----
/*non-public*/
void updateForm(LambdaForm newForm) {
assert(newForm.customized == null || newForm.customized == this);
if (form == newForm) return;
newForm.prepare(); // as in MethodHandle.<init>
! UNSAFE.putObjectVolatile(this, FORM_OFFSET, newForm);
}
/** Craft a LambdaForm customized for this particular MethodHandle */
/*non-public*/
void customize() {
+ final LambdaForm form = this.form;
if (form.customized == null) {
LambdaForm newForm = form.customize(this);
updateForm(newForm);
} else {
assert(form.customized == this);
< prev index next >