internal void ExitProcess(int ProcessId) { if (Processes.TryGetValue(ProcessId, out Process Process) && Process.NeedsHbAbi) { string NextNro = Homebrew.ReadHbAbiNextLoadPath(Process.Memory, Process.HbAbiDataPosition); Ns.Log.PrintInfo(LogClass.Loader, $"HbAbi NextLoadPath {NextNro}"); if (NextNro == string.Empty) { NextNro = "sdmc:/hbmenu.nro"; } NextNro = NextNro.Replace("sdmc:", string.Empty); NextNro = Ns.VFs.GetFullPath(Ns.VFs.GetSdCardPath(), NextNro); if (File.Exists(NextNro)) { LoadProgram(NextNro); } } if (Processes.TryRemove(ProcessId, out Process)) { Process.StopAllThreadsAsync(); Process.Dispose(); if (Processes.Count == 0) { Ns.OnFinish(EventArgs.Empty); } } }
internal void ExitProcess(int ProcessId) { if (Processes.TryGetValue(ProcessId, out Process Process) && Process.NeedsHbAbi) { string NextNro = Homebrew.ReadHbAbiNextLoadPath(Process.Memory, Process.HbAbiDataPosition); Logging.Info($"HbAbi NextLoadPath {NextNro}"); if (NextNro == string.Empty) { NextNro = "sdmc:/hbmenu.nro"; } NextNro = NextNro.Replace("sdmc:", string.Empty); NextNro = Ns.VFs.GetFullPath(Ns.VFs.GetSdCardPath(), NextNro); if (File.Exists(NextNro)) { //TODO: Those dictionaries shouldn't even exist, //the Mutex and CondVar helper classes should be static. Mutexes.Clear(); CondVars.Clear(); LoadProgram(NextNro); } } if (Processes.TryRemove(ProcessId, out Process)) { Process.StopAllThreadsAsync(); Process.Dispose(); if (Processes.Count == 0) { Ns.OnFinish(EventArgs.Empty); } } }