提交 7d9ef496 编写于 作者: J jiangli

Merge

...@@ -50,8 +50,12 @@ HS_DTRACE_PROBE_DECL(hs_private, cms__remark__end); ...@@ -50,8 +50,12 @@ HS_DTRACE_PROBE_DECL(hs_private, cms__remark__end);
void VM_CMS_Operation::acquire_pending_list_lock() { void VM_CMS_Operation::acquire_pending_list_lock() {
// The caller may block while communicating // The caller may block while communicating
// with the SLT thread in order to acquire/release the PLL. // with the SLT thread in order to acquire/release the PLL.
ConcurrentMarkSweepThread::slt()-> SurrogateLockerThread* slt = ConcurrentMarkSweepThread::slt();
manipulatePLL(SurrogateLockerThread::acquirePLL); if (slt != NULL) {
slt->manipulatePLL(SurrogateLockerThread::acquirePLL);
} else {
SurrogateLockerThread::report_missing_slt();
}
} }
void VM_CMS_Operation::release_and_notify_pending_list_lock() { void VM_CMS_Operation::release_and_notify_pending_list_lock() {
......
...@@ -213,8 +213,12 @@ void VM_CGC_Operation::acquire_pending_list_lock() { ...@@ -213,8 +213,12 @@ void VM_CGC_Operation::acquire_pending_list_lock() {
assert(_needs_pll, "don't call this otherwise"); assert(_needs_pll, "don't call this otherwise");
// The caller may block while communicating // The caller may block while communicating
// with the SLT thread in order to acquire/release the PLL. // with the SLT thread in order to acquire/release the PLL.
ConcurrentMarkThread::slt()-> SurrogateLockerThread* slt = ConcurrentMarkThread::slt();
manipulatePLL(SurrogateLockerThread::acquirePLL); if (slt != NULL) {
slt->manipulatePLL(SurrogateLockerThread::acquirePLL);
} else {
SurrogateLockerThread::report_missing_slt();
}
} }
void VM_CGC_Operation::release_and_notify_pending_list_lock() { void VM_CGC_Operation::release_and_notify_pending_list_lock() {
......
...@@ -137,6 +137,13 @@ SurrogateLockerThread* SurrogateLockerThread::make(TRAPS) { ...@@ -137,6 +137,13 @@ SurrogateLockerThread* SurrogateLockerThread::make(TRAPS) {
return res; return res;
} }
void SurrogateLockerThread::report_missing_slt() {
vm_exit_during_initialization(
"GC before GC support fully initialized: "
"SLT is needed but has not yet been created.");
ShouldNotReachHere();
}
void SurrogateLockerThread::manipulatePLL(SLT_msg_type msg) { void SurrogateLockerThread::manipulatePLL(SLT_msg_type msg) {
MutexLockerEx x(&_monitor, Mutex::_no_safepoint_check_flag); MutexLockerEx x(&_monitor, Mutex::_no_safepoint_check_flag);
assert(_buffer == empty, "Should be empty"); assert(_buffer == empty, "Should be empty");
......
...@@ -93,6 +93,9 @@ class SurrogateLockerThread: public JavaThread { ...@@ -93,6 +93,9 @@ class SurrogateLockerThread: public JavaThread {
public: public:
static SurrogateLockerThread* make(TRAPS); static SurrogateLockerThread* make(TRAPS);
// Terminate VM with error message that SLT needed but not yet created.
static void report_missing_slt();
SurrogateLockerThread(); SurrogateLockerThread();
bool is_hidden_from_external_view() const { return true; } bool is_hidden_from_external_view() const { return true; }
......
...@@ -85,7 +85,7 @@ void InterfaceSupport::gc_alot() { ...@@ -85,7 +85,7 @@ void InterfaceSupport::gc_alot() {
// Short-circuit any possible re-entrant gc-a-lot attempt // Short-circuit any possible re-entrant gc-a-lot attempt
if (thread->skip_gcalot()) return; if (thread->skip_gcalot()) return;
if (is_init_completed()) { if (Threads::is_vm_complete()) {
if (++_fullgc_alot_invocation < FullGCALotStart) { if (++_fullgc_alot_invocation < FullGCALotStart) {
return; return;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册