< prev index next >
src/share/vm/c1/c1_LIRGenerator.cpp
Print this page
@@ -430,11 +430,11 @@
if (bci == SynchronizationEntryBCI) {
if (x->as_ExceptionObject() || x->as_Throw()) {
// all locals are dead on exit from the synthetic unlocker
liveness.clear();
} else {
- assert(x->as_MonitorEnter() || x->as_ProfileInvoke(), "only other cases are MonitorEnter and ProfileInvoke");
+ assert(x->as_MonitorEnter() || x->as_MonitorExit() || x->as_ProfileInvoke(), "only other cases are MonitorEnter, MonitorExit and ProfileInvoke");
}
}
if (!liveness.is_valid()) {
// Degenerate or breakpointed method.
bailout("Degenerate or breakpointed method");
@@ -649,16 +649,16 @@
// for handling NullPointerException, use debug info representing just the lock stack before this monitorenter
__ lock_object(hdr, object, lock, scratch, slow_path, info_for_exception);
}
-void LIRGenerator::monitor_exit(LIR_Opr object, LIR_Opr lock, LIR_Opr new_hdr, LIR_Opr scratch, int monitor_no) {
+void LIRGenerator::monitor_exit(LIR_Opr object, LIR_Opr lock, LIR_Opr new_hdr, LIR_Opr scratch, int monitor_no, CodeEmitInfo* info) {
if (!GenerateSynchronizationCode) return;
// setup registers
LIR_Opr hdr = lock;
lock = new_hdr;
- CodeStub* slow_path = new MonitorExitStub(lock, UseFastLocking, monitor_no);
+ CodeStub* slow_path = new MonitorExitStub(lock, UseFastLocking, monitor_no, info);
__ load_stack_address_monitor(monitor_no, lock);
__ unlock_object(hdr, object, lock, scratch, slow_path);
}
#ifndef PRODUCT
< prev index next >