Fix typo and update priority/avoid duplicates on UpdateMutexOwner

This commit is contained in:
gdkchan 2018-05-14 03:09:08 -03:00
parent ee0b14ba08
commit fdfa9424c8
2 changed files with 23 additions and 23 deletions

View File

@ -155,7 +155,7 @@ namespace Ryujinx.Core.OsHle.Kernel
if (IdealCore == -2) if (IdealCore == -2)
{ {
//TODO: Get this valcdue from the NPDM file. //TODO: Get this value from the NPDM file.
IdealCore = 0; IdealCore = 0;
CoreMask = 1 << IdealCore; CoreMask = 1 << IdealCore;

View File

@ -330,6 +330,28 @@ namespace Ryujinx.Core.OsHle.Kernel
} }
} }
private void UpdateMutexOwner(KThread CurrThread, KThread NewOwner, long MutexAddress)
{
//Go through all threads waiting for the mutex,
//and update the MutexOwner field to point to the new owner.
lock (Process.ThreadSyncLock)
{
for (int Index = 0; Index < CurrThread.MutexWaiters.Count; Index++)
{
KThread Thread = CurrThread.MutexWaiters[Index];
if (Thread.MutexAddress == MutexAddress)
{
CurrThread.MutexWaiters.RemoveAt(Index--);
Thread.MutexOwner = NewOwner;
InsertWaitingMutexThread(NewOwner, Thread);
}
}
}
}
private void InsertWaitingMutexThread(int OwnerThreadHandle, KThread WaitThread) private void InsertWaitingMutexThread(int OwnerThreadHandle, KThread WaitThread)
{ {
KThread OwnerThread = Process.HandleTable.GetData<KThread>(OwnerThreadHandle); KThread OwnerThread = Process.HandleTable.GetData<KThread>(OwnerThreadHandle);
@ -359,28 +381,6 @@ namespace Ryujinx.Core.OsHle.Kernel
} }
} }
private void UpdateMutexOwner(KThread CurrThread, KThread NewOwner, long MutexAddress)
{
//Go through all threads waiting for the mutex,
//and update the MutexOwner field to point to the new owner.
lock (Process.ThreadSyncLock)
{
for (int Index = 0; Index < CurrThread.MutexWaiters.Count; Index++)
{
KThread Thread = CurrThread.MutexWaiters[Index];
if (Thread.MutexAddress == MutexAddress)
{
CurrThread.MutexWaiters.RemoveAt(Index--);
Thread.MutexOwner = NewOwner;
NewOwner.MutexWaiters.Add(Thread);
}
}
}
}
private KThread GetHighestPriority(List<KThread> Threads, long MutexAddress) private KThread GetHighestPriority(List<KThread> Threads, long MutexAddress)
{ {
return GetHighestPriority(Threads, x => x.MutexAddress == MutexAddress); return GetHighestPriority(Threads, x => x.MutexAddress == MutexAddress);