mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-08 03:28:20 +02:00
Used cmpxchg for mCollectFailed failover marking during sweep
This commit is contained in:
parent
f67eaa6d8a
commit
c18e24d7e6
1 changed files with 7 additions and 1 deletions
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue