Fix race condition on IdDictionary

This commit is contained in:
gdkchan 2018-08-07 22:09:35 -03:00
commit 6090ce3631

View file

@ -8,8 +8,6 @@ namespace Ryujinx.HLE.OsHle
{ {
private ConcurrentDictionary<int, object> Objs; private ConcurrentDictionary<int, object> Objs;
private int FreeIdHint = 1;
public IdDictionary() public IdDictionary()
{ {
Objs = new ConcurrentDictionary<int, object>(); Objs = new ConcurrentDictionary<int, object>();
@ -21,16 +19,6 @@ namespace Ryujinx.HLE.OsHle
} }
public int Add(object Data) public int Add(object Data)
{
if (Objs.TryAdd(FreeIdHint, Data))
{
return FreeIdHint++;
}
return AddSlow(Data);
}
private int AddSlow(object Data)
{ {
for (int Id = 1; Id < int.MaxValue; Id++) for (int Id = 1; Id < int.MaxValue; Id++)
{ {
@ -67,8 +55,6 @@ namespace Ryujinx.HLE.OsHle
{ {
if (Objs.TryRemove(Id, out object Obj)) if (Objs.TryRemove(Id, out object Obj))
{ {
FreeIdHint = Id;
return Obj; return Obj;
} }