226 ShenandoahMarkingContext* const marking_context = _heap->marking_context();
227 if (_heap->is_concurrent_root_in_progress() && !marking_context->is_marked(obj)) {
228 Thread* thr = Thread::current();
229 if (thr->is_Java_thread()) {
230 return NULL;
231 } else {
232 return obj;
233 }
234 }
235
236 oop fwd = load_reference_barrier_not_null(obj);
237 if (load_addr != NULL && fwd != obj) {
238 // Since we are here and we know the load address, update the reference.
239 ShenandoahHeap::cas_oop(fwd, load_addr, obj);
240 }
241
242 return fwd;
243 }
244
245 void ShenandoahBarrierSet::clone_barrier_runtime(oop src) {
246 if (_heap->has_forwarded_objects()) {
247 clone_barrier(src);
248 }
249 }
250
|
226 ShenandoahMarkingContext* const marking_context = _heap->marking_context();
227 if (_heap->is_concurrent_root_in_progress() && !marking_context->is_marked(obj)) {
228 Thread* thr = Thread::current();
229 if (thr->is_Java_thread()) {
230 return NULL;
231 } else {
232 return obj;
233 }
234 }
235
236 oop fwd = load_reference_barrier_not_null(obj);
237 if (load_addr != NULL && fwd != obj) {
238 // Since we are here and we know the load address, update the reference.
239 ShenandoahHeap::cas_oop(fwd, load_addr, obj);
240 }
241
242 return fwd;
243 }
244
245 void ShenandoahBarrierSet::clone_barrier_runtime(oop src) {
246 if (_heap->has_forwarded_objects() || (ShenandoahStoreValEnqueueBarrier && _heap->is_concurrent_mark_in_progress())) {
247 clone_barrier(src);
248 }
249 }
250
|