diff --git a/gc/base/MarkingScheme.cpp b/gc/base/MarkingScheme.cpp index 94566a88884..394d0a5701a 100644 --- a/gc/base/MarkingScheme.cpp +++ b/gc/base/MarkingScheme.cpp @@ -410,7 +410,7 @@ MM_MarkingScheme::createWorkPackets(MM_EnvironmentBase *env) return workPackets; } -void +bool MM_MarkingScheme::fixupForwardedSlot(omrobjectptr_t *slotPtr) { #if defined(OMR_GC_CONCURRENT_SCAVENGER) bool const compressed = _extensions->compressObjectReferences(); @@ -423,10 +423,12 @@ MM_MarkingScheme::fixupForwardedSlot(omrobjectptr_t *slotPtr) { forwardHeader.restoreSelfForwardedPointer(); } else { *slotPtr = forwardPtr; + return true; } } } #endif /* OMR_GC_CONCURRENT_SCAVENGER */ + return false; } uintptr_t diff --git a/gc/base/MarkingScheme.hpp b/gc/base/MarkingScheme.hpp index 3c2c67002db..68c31f32c4e 100644 --- a/gc/base/MarkingScheme.hpp +++ b/gc/base/MarkingScheme.hpp @@ -291,12 +291,13 @@ class MM_MarkingScheme : public MM_BaseVirtual MMINLINE void fixupForwardedSlot(GC_SlotObject *slotObject) { if (_extensions->isConcurrentScavengerEnabled() && _extensions->isScavengerBackOutFlagRaised()) { omrobjectptr_t slot = slotObject->readReferenceFromSlot(); - fixupForwardedSlot(&slot); - slotObject->writeReferenceToSlot(slot); + if (fixupForwardedSlot(&slot)) { + slotObject->writeReferenceToSlot(slot); + } } } - void fixupForwardedSlot(omrobjectptr_t *slotPtr); + bool fixupForwardedSlot(omrobjectptr_t *slotPtr); virtual uintptr_t setupIndexableScanner(MM_EnvironmentBase *env, omrobjectptr_t objectPtr, MM_MarkingSchemeScanReason reason, uintptr_t *sizeToDo, uintptr_t *sizeInElementsToDo, fomrobject_t **basePtr, uintptr_t *flags); /**