< prev index next >

src/share/vm/gc/shenandoah/shenandoahHeap.inline.hpp

Print this page
rev 12191 : Improve handling of cancelled-gc flag.

@@ -186,12 +186,15 @@
     return heap_oop;
   }
 }
 
 inline bool ShenandoahHeap::cancelled_concgc() const {
-  bool cancelled = _cancelled_concgc;
-  return cancelled;
+  return (jbyte) OrderAccess::load_acquire((jbyte*) &_cancelled_concgc);
+}
+
+inline void ShenandoahHeap::set_cancelled_concgc(bool v) {
+  OrderAccess::release_store_fence((jbyte*) &_cancelled_concgc, (jbyte) v);
 }
 
 inline HeapWord* ShenandoahHeap::allocate_from_gclab(Thread* thread, size_t size) {
   if (UseTLAB) {
     HeapWord* obj = thread->gclab().allocate(size);

@@ -235,15 +238,10 @@
     required  = BrooksPointer::word_size() + p->size();
 #endif
 
   assert(! heap_region_containing(p)->is_humongous(), "never evacuate humongous objects");
 
-  // Don't even attempt to evacuate anything if evacuation has been cancelled.
-  if (_cancelled_concgc) {
-    return ShenandoahBarrierSet::resolve_oop_static(p);
-  }
-
   bool alloc_from_gclab = true;
   HeapWord* filler = allocate_from_gclab(thread, required);
   if (filler == NULL) {
     filler = allocate_memory(required, true);
     alloc_from_gclab = false;
< prev index next >