1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-08 11:38:21 +02:00

Used cmpxchg for mCollectFailed failover marking during sweep

This commit is contained in:
Brian Fiete 2024-08-25 09:32:17 -04:00
parent f67eaa6d8a
commit c18e24d7e6

View file

@ -1098,7 +1098,13 @@ void BFGC::SweepSpan(tcmalloc_obj::Span* span, int expectedStartPage)
int markId = objectFlags & BF_OBJECTFLAG_MARK_ID_MASK;
if ((mCollectFailed) && (markId != mCurMarkId))
{
obj->mObjectFlags = (BfObjectFlags)((obj->mObjectFlags & ~BF_OBJECTFLAG_MARK_ID_MASK) | mCurMarkId);
while (true)
{
uintptr prevVal = (uintptr)obj->mClassVData;
uintptr newVal = (prevVal & ~BF_OBJECTFLAG_MARK_ID_MASK) | mCurMarkId;
if (::InterlockedCompareExchange((volatile uintptr*)&obj->mClassVData, newVal, prevVal) == prevVal)
break;
}
markId = mCurMarkId;
}