@@ -2285,14 +2285,21 @@ MM_CopyForwardScheme::updateMarkMapAndCardTableOnCopy(MM_EnvironmentVLHGC *env,
2285
2285
MMINLINE void
2286
2286
MM_CopyForwardScheme::scanOwnableSynchronizerObjectSlots (MM_EnvironmentVLHGC *env, MM_AllocationContextTarok *reservingContext, J9Object *objectPtr, ScanReason reason)
2287
2287
{
2288
- if (SCAN_REASON_COPYSCANCACHE == reason) {
2289
- addOwnableSynchronizerObjectInList (env, objectPtr);
2290
- } else if (SCAN_REASON_PACKET == reason) {
2291
- if (isObjectInEvacuateMemoryNoCheck (objectPtr)) {
2288
+ if (scanMixedObjectSlots (env, reservingContext, objectPtr, reason)) {
2289
+ /*
2290
+ * If object has been scanned without triggering abort add it to the list here.
2291
+ * If object scan triggered abort, it has been added to work packet
2292
+ * and is going to be rescanned again. It should not be added to the list here
2293
+ * to prevent duplication during second scan.
2294
+ */
2295
+ if (SCAN_REASON_COPYSCANCACHE == reason) {
2292
2296
addOwnableSynchronizerObjectInList (env, objectPtr);
2297
+ } else if (SCAN_REASON_PACKET == reason) {
2298
+ if (isObjectInEvacuateMemoryNoCheck (objectPtr)) {
2299
+ addOwnableSynchronizerObjectInList (env, objectPtr);
2300
+ }
2293
2301
}
2294
2302
}
2295
- scanMixedObjectSlots (env, reservingContext, objectPtr, reason);
2296
2303
}
2297
2304
2298
2305
void
@@ -2416,7 +2423,7 @@ MM_CopyForwardScheme::iterateAndCopyforwardSlotReference(MM_EnvironmentVLHGC *en
2416
2423
return success;
2417
2424
}
2418
2425
2419
- void
2426
+ bool
2420
2427
MM_CopyForwardScheme::scanMixedObjectSlots (MM_EnvironmentVLHGC *env, MM_AllocationContextTarok *reservingContext, J9Object *objectPtr, ScanReason reason)
2421
2428
{
2422
2429
if (_tracingEnabled) {
@@ -2432,6 +2439,7 @@ MM_CopyForwardScheme::scanMixedObjectSlots(MM_EnvironmentVLHGC *env, MM_Allocati
2432
2439
}
2433
2440
2434
2441
updateScanStats (env, objectPtr, reason);
2442
+ return success;
2435
2443
}
2436
2444
2437
2445
void
0 commit comments