HashSet is not thread safe, hopefully this fixes the CPU issue where it throws a exception on Add

This commit is contained in:
gdkchan 2018-04-04 18:17:37 -03:00
parent 5c565ff1be
commit 6647e9b749

View file

@ -107,25 +107,31 @@ namespace ChocolArm64
ATranslatedSub Subroutine = Context.GetSubroutine(); ATranslatedSub Subroutine = Context.GetSubroutine();
if (SubBlocks.Contains(Position)) lock (SubBlocks)
{ {
SubBlocks.Remove(Position); if (SubBlocks.Contains(Position))
{
SubBlocks.Remove(Position);
Subroutine.SetType(ATranslatedSubType.SubBlock); Subroutine.SetType(ATranslatedSubType.SubBlock);
} }
else else
{ {
Subroutine.SetType(ATranslatedSubType.SubTier0); Subroutine.SetType(ATranslatedSubType.SubTier0);
}
} }
CachedSubs.AddOrUpdate(Position, Subroutine, (Key, OldVal) => Subroutine); CachedSubs.AddOrUpdate(Position, Subroutine, (Key, OldVal) => Subroutine);
AOpCode LastOp = Block.GetLastOp(); AOpCode LastOp = Block.GetLastOp();
if (LastOp.Emitter != AInstEmit.Ret && lock (SubBlocks)
LastOp.Emitter != AInstEmit.Br)
{ {
SubBlocks.Add(LastOp.Position + 4); if (LastOp.Emitter != AInstEmit.Ret &&
LastOp.Emitter != AInstEmit.Br)
{
SubBlocks.Add(LastOp.Position + 4);
}
} }
return Subroutine; return Subroutine;