# HG changeset patch # User Doug Simon # Date 1353623764 -3600 # Node ID 45029b3ac59f8486f7d6c6ac06f5d4a0f6bb0e98 # Parent 1d419abb00813bae88537e051a94a4059af246d2 fixed bug in the resetting of static call stubs that caused infinite, safepoint free loops in non-product builds of the VM diff -r 1d419abb0081 -r 45029b3ac59f src/share/vm/code/nmethod.cpp --- a/src/share/vm/code/nmethod.cpp Thu Nov 22 23:34:49 2012 +0100 +++ b/src/share/vm/code/nmethod.cpp Thu Nov 22 23:36:04 2012 +0100 @@ -1792,8 +1792,8 @@ // really alive. void nmethod::verify_metadata_loaders(address low_boundary, BoolObjectClosure* is_alive) { #ifdef ASSERT - RelocIterator iter(this, low_boundary); - while (iter.next()) { + RelocIterator iter(this, low_boundary); + while (iter.next()) { // static_stub_Relocations may have dangling references to // Method*s so trim them out here. Otherwise it looks like // compiled code is maintaining a link to dead metadata. @@ -1802,11 +1802,13 @@ CompiledIC* cic = CompiledIC_at(iter.reloc()); if (!cic->is_call_to_interpreted()) { static_call_addr = iter.addr(); + cic->set_to_clean(); } } else if (iter.type() == relocInfo::static_call_type) { CompiledStaticCall* csc = compiledStaticCall_at(iter.reloc()); if (!csc->is_call_to_interpreted()) { static_call_addr = iter.addr(); + csc->set_to_clean(); } } if (static_call_addr != NULL) {