PM: Fix missing flags set/missing wait. Now works on 5.x.

This commit is contained in:
Michael Scire 2018-05-08 18:46:38 -06:00
parent 3682a56062
commit 173e6c8c0f
2 changed files with 13 additions and 3 deletions

View file

@ -94,7 +94,7 @@ void Registration::HandleProcessLaunch() {
if ((program_info.application_type & 3) == 1) {
ResourceLimitUtils::EnsureApplicationResourcesAvailable();
}
/* Try to create the process... */
if (R_FAILED((rc = ldrPmCreateProcess(LAUNCHFLAGS_ARGLOW(launch_flags) | LAUNCHFLAGS_ARGHIGH(launch_flags), new_process.ldr_queue_index, ResourceLimitUtils::GetResourceLimitHandle(program_info.application_type), &new_process.handle)))) {
goto PROCESS_CREATION_FAILED;
@ -121,8 +121,8 @@ void Registration::HandleProcessLaunch() {
if (program_info.application_type & 1) {
new_process.flags |= 0x40;
}
if (kernelAbove200() && LAUNCHFLAGS_NOTIYDEBUGSPECIAL(launch_flags) && (program_info.application_type & 4)) {
if (kernelAbove200() && LAUNCHFLAGS_NOTIYDEBUGSPECIAL(launch_flags) && (program_info.application_type & 4)) {
new_process.flags |= 0x80;
}
if (LAUNCHFLAGS_NOTIFYWHENEXITED(launch_flags)) {
new_process.flags |= 1;

View file

@ -123,6 +123,7 @@ void ResourceLimitUtils::InitializeLimits() {
}
void ResourceLimitUtils::EnsureApplicationResourcesAvailable() {
Result rc;
Handle application_reslimit_h = g_resource_limit_handles[1];
for (unsigned int i = 0; i < 5; i++) {
u64 result;
@ -133,6 +134,15 @@ void ResourceLimitUtils::EnsureApplicationResourcesAvailable() {
svcSleepThread(1000000ULL);
} while (result);
}
if (kernelAbove500()) {
u64 result;
do {
if (R_FAILED(svcGetSystemInfo(&result, 1, 0, 0))) {
/* TODO: Panic. */
}
svcSleepThread(1000000ULL);
} while (result);
}
}
Handle ResourceLimitUtils::GetResourceLimitHandle(u16 application_type) {