Improve kernel events implementation (#430)
* Improve kernel events implementation * Some cleanup * Address PR feedback
This commit is contained in:
parent
54ed9096bd
commit
7de7b559ad
38 changed files with 597 additions and 161 deletions
|
@ -71,7 +71,22 @@ namespace Ryujinx.HLE.HOS
|
|||
|
||||
TlsPages = new List<KTlsPageManager>();
|
||||
|
||||
HandleTable = new KProcessHandleTable();
|
||||
int HandleTableSize = 1024;
|
||||
|
||||
if (MetaData != null)
|
||||
{
|
||||
foreach (KernelAccessControlItem Item in MetaData.ACI0.KernelAccessControl.Items)
|
||||
{
|
||||
if (Item.HasHandleTableSize)
|
||||
{
|
||||
HandleTableSize = Item.HandleTableSize;
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
HandleTable = new KProcessHandleTable(Device.System, HandleTableSize);
|
||||
|
||||
AppletState = new AppletStateMgr(Device.System);
|
||||
|
||||
|
@ -139,7 +154,7 @@ namespace Ryujinx.HLE.HOS
|
|||
return false;
|
||||
}
|
||||
|
||||
KThread MainThread = HandleTable.GetData<KThread>(Handle);
|
||||
KThread MainThread = HandleTable.GetKThread(Handle);
|
||||
|
||||
if (NeedsHbAbi)
|
||||
{
|
||||
|
@ -190,7 +205,7 @@ namespace Ryujinx.HLE.HOS
|
|||
|
||||
Thread.LastPc = EntryPoint;
|
||||
|
||||
int Handle = HandleTable.OpenHandle(Thread);
|
||||
HandleTable.GenerateHandle(Thread, out int Handle);
|
||||
|
||||
CpuThread.ThreadState.CntfrqEl0 = TickFreq;
|
||||
CpuThread.ThreadState.Tpidr = Tpidr;
|
||||
|
@ -427,13 +442,7 @@ namespace Ryujinx.HLE.HOS
|
|||
|
||||
Disposed = true;
|
||||
|
||||
foreach (object Obj in HandleTable.Clear())
|
||||
{
|
||||
if (Obj is KSession Session)
|
||||
{
|
||||
Session.Dispose();
|
||||
}
|
||||
}
|
||||
HandleTable.Destroy();
|
||||
|
||||
INvDrvServices.UnloadProcess(this);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue