< prev index next >
src/hotspot/share/code/nmethod.cpp
set_osr_link(NULL);
NMethodSweeper::report_state_change(this);
// The release is only needed for compile-time ordering, as accesses
// into the nmethod after the store is not safe, due to the sweeper
! // being allowed to free it then, in the case of concurrent nmethod
! // unloading. Therefore, there is no need for acquire on the loader side.
OrderAccess::release_store(&_state, (signed char)unloaded);
}
void nmethod::invalidate_osr_method() {
assert(_entry_bci != InvocationEntryBci, "wrong kind of nmethod");
set_osr_link(NULL);
NMethodSweeper::report_state_change(this);
// The release is only needed for compile-time ordering, as accesses
// into the nmethod after the store is not safe, due to the sweeper
! // being allowed to free it when the store is observed, during
! // concurrent nmethod unloading. Therefore, there is no need for
! // acquire on the loader side.
OrderAccess::release_store(&_state, (signed char)unloaded);
}
void nmethod::invalidate_osr_method() {
assert(_entry_bci != InvocationEntryBci, "wrong kind of nmethod");
***************
DepTable* table = new DepTable();
// Iterate over live nmethods and check dependencies of all nmethods that are not
// marked for deoptimization. A particular dependency is only checked once.
! NMethodIterator iter(true /* only_alive */, true /* only_not_unloading */);
while(iter.next()) {
nmethod* nm = iter.method();
// Only notify for live nmethods
if (!nm->is_marked_for_deoptimization()) {
for (Dependencies::DepStream deps(nm); deps.next(); ) {
DepTable* table = new DepTable();
// Iterate over live nmethods and check dependencies of all nmethods that are not
// marked for deoptimization. A particular dependency is only checked once.
! NMethodIterator iter(NMethodIterator::only_alive_and_not_unloading);
while(iter.next()) {
nmethod* nm = iter.method();
// Only notify for live nmethods
if (!nm->is_marked_for_deoptimization()) {
for (Dependencies::DepStream deps(nm); deps.next(); ) {
< prev index next >