--- old/src/share/vm/code/icBuffer.cpp 2014-09-22 14:01:38.194214582 +0200 +++ new/src/share/vm/code/icBuffer.cpp 2014-09-22 14:01:38.118214579 +0200 @@ -52,11 +52,17 @@ void ICStub::finalize() { if (!is_empty()) { ResourceMark rm; - CompiledIC *ic = CompiledIC_at(CodeCache::find_nmethod(ic_site()), ic_site()); - assert(CodeCache::find_nmethod(ic->instruction_address()) != NULL, "inline cache in non-nmethod?"); + CodeBlob* cb = CodeCache::find_blob_unsafe(ic_site()); + assert(cb != NULL && cb->is_nmethod(), "must be nmethod"); + nmethod* nm = (nmethod*) cb; + if (!nm->is_zombie()) { + // Back patch IC + CompiledIC *ic = CompiledIC_at(nm, ic_site()); + assert(CodeCache::find_nmethod(ic->instruction_address()) != NULL, "inline cache in non-nmethod?"); - assert(this == ICStub_from_destination_address(ic->stub_address()), "wrong owner of ic buffer"); - ic->set_ic_destination_and_value(destination(), cached_value()); + assert(this == ICStub_from_destination_address(ic->stub_address()), "wrong owner of ic buffer"); + ic->set_ic_destination_and_value(destination(), cached_value()); + } } }