< prev index next >
src/hotspot/share/runtime/deoptimization.cpp
Print this page
rev 57126 : [mq]: 8234796-v2
*** 799,833 ****
return bt;
JRT_END
! class DeoptimizeMarkedTC : public ThreadClosure {
public:
! virtual void do_thread(Thread* thread) {
! assert(thread->is_Java_thread(), "must be");
JavaThread* jt = (JavaThread*)thread;
jt->deoptimize_marked_methods();
}
};
void Deoptimization::deoptimize_all_marked() {
ResourceMark rm;
DeoptimizationMarker dm;
if (SafepointSynchronize::is_at_safepoint()) {
! DeoptimizeMarkedTC deopt;
// Make the dependent methods not entrant
CodeCache::make_marked_nmethods_not_entrant();
Threads::java_threads_do(&deopt);
} else {
// Make the dependent methods not entrant
{
MutexLocker mu(CodeCache_lock, Mutex::_no_safepoint_check_flag);
CodeCache::make_marked_nmethods_not_entrant();
}
! DeoptimizeMarkedTC deopt;
Handshake::execute(&deopt);
}
}
Deoptimization::DeoptAction Deoptimization::_unloaded_action
--- 799,833 ----
return bt;
JRT_END
! class DeoptimizeMarkedClosure : public HandshakeClosure {
public:
! DeoptimizeMarkedClosure() : HandshakeClosure("Deoptimize") {}
! void do_thread(Thread* thread) {
JavaThread* jt = (JavaThread*)thread;
jt->deoptimize_marked_methods();
}
};
void Deoptimization::deoptimize_all_marked() {
ResourceMark rm;
DeoptimizationMarker dm;
if (SafepointSynchronize::is_at_safepoint()) {
! DeoptimizeMarkedClosure deopt;
// Make the dependent methods not entrant
CodeCache::make_marked_nmethods_not_entrant();
Threads::java_threads_do(&deopt);
} else {
// Make the dependent methods not entrant
{
MutexLocker mu(CodeCache_lock, Mutex::_no_safepoint_check_flag);
CodeCache::make_marked_nmethods_not_entrant();
}
! DeoptimizeMarkedClosure deopt;
Handshake::execute(&deopt);
}
}
Deoptimization::DeoptAction Deoptimization::_unloaded_action
< prev index next >