src/share/vm/code/icBuffer.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File
*** old/src/share/vm/code/icBuffer.cpp	Mon Sep 22 14:01:38 2014
--- new/src/share/vm/code/icBuffer.cpp	Mon Sep 22 14:01:38 2014

*** 50,65 **** --- 50,71 ---- int InlineCacheBuffer::_pending_count = 0; void ICStub::finalize() { if (!is_empty()) { ResourceMark rm; ! CompiledIC *ic = CompiledIC_at(CodeCache::find_nmethod(ic_site()), ic_site()); ! 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()); } + } } address ICStub::destination() const { return InlineCacheBuffer::ic_buffer_entry_point(code_begin());

src/share/vm/code/icBuffer.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File