8169867: Method::restore_unshareable_info does not invoke Method::link_method

Reviewed-by: jiangli, kvn, thartmann
This commit is contained in:
Ioi Lam 2016-11-27 19:58:30 -08:00
parent f9087dae6d
commit 7624f76c84
4 changed files with 95 additions and 21 deletions

View file

@ -2600,6 +2600,7 @@ AdapterHandlerEntry* AdapterHandlerLibrary::new_entry(AdapterFingerPrint* finger
AdapterHandlerEntry* AdapterHandlerLibrary::get_adapter(const methodHandle& method) {
AdapterHandlerEntry* entry = get_adapter0(method);
if (method->is_shared()) {
// See comments around Method::link_method()
MutexLocker mu(AdapterHandlerLibrary_lock);
if (method->adapter() == NULL) {
method->update_adapter_trampoline(entry);
@ -2609,6 +2610,7 @@ AdapterHandlerEntry* AdapterHandlerLibrary::get_adapter(const methodHandle& meth
CodeBuffer buffer(trampoline, (int)SharedRuntime::trampoline_size());
MacroAssembler _masm(&buffer);
SharedRuntime::generate_trampoline(&_masm, entry->get_c2i_entry());
assert(*(int*)trampoline != 0, "Instruction(s) for trampoline must not be encoded as zeros.");
if (PrintInterpreter) {
Disassembler::decode(buffer.insts_begin(), buffer.insts_end());