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