< 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 >