< prev index next >

src/share/vm/runtime/sharedRuntime.cpp

Print this page
rev 8961 : [mq]: diff-shenandoah.patch

@@ -209,10 +209,15 @@
   thread->dirty_card_queue().enqueue(card_addr);
 JRT_END
 
 #endif // INCLUDE_ALL_GCS
 
+// G1 write-barrier pre: executed before a pointer store.
+JRT_LEAF(void, SharedRuntime::shenandoah_clone_barrier(oopDesc* obj))
+  oopDesc::bs()->write_region(MemRegion((HeapWord*) obj, obj->size()));
+JRT_END
+
 
 JRT_LEAF(jlong, SharedRuntime::lmul(jlong y, jlong x))
   return x * y;
 JRT_END
 

@@ -1793,10 +1798,11 @@
 JRT_END
 
 
 // Handles the uncommon case in locking, i.e., contention or an inflated lock.
 JRT_BLOCK_ENTRY(void, SharedRuntime::complete_monitor_locking_C(oopDesc* _obj, BasicLock* lock, JavaThread* thread))
+  _obj = oopDesc::bs()->resolve_and_maybe_copy_oop(_obj);
   // Disable ObjectSynchronizer::quick_enter() in default config
   // until JDK-8077392 is resolved.
   if ((SyncFlags & 256) != 0 && !SafepointSynchronize::is_synchronizing()) {
     // Only try quick_enter() if we're not trying to reach a safepoint
     // so that the calling thread reaches the safepoint more quickly.

@@ -1822,10 +1828,11 @@
   JRT_BLOCK_END
 JRT_END
 
 // Handles the uncommon cases of monitor unlocking in compiled code
 JRT_LEAF(void, SharedRuntime::complete_monitor_unlocking_C(oopDesc* _obj, BasicLock* lock, JavaThread * THREAD))
+  _obj = oopDesc::bs()->resolve_and_maybe_copy_oop(_obj);
    oop obj(_obj);
   assert(JavaThread::current() == THREAD, "invariant");
   // I'm not convinced we need the code contained by MIGHT_HAVE_PENDING anymore
   // testing was unable to ever fire the assert that guarded it so I have removed it.
   assert(!HAS_PENDING_EXCEPTION, "Do we need code below anymore?");
< prev index next >