Dialog: Lock volatile on thread.

This means it doesn't matter if GetStatus is called.
This commit is contained in:
Unknown W. Brackets 2021-04-07 18:12:50 -07:00
parent 429b4594d0
commit 90f4098b3d
2 changed files with 8 additions and 0 deletions

View file

@ -97,6 +97,8 @@ void PSPDialog::FinishVolatile() {
int PSPDialog::FinishInit() {
if (ReadStatus() != SCE_UTILITY_STATUS_INITIALIZE)
return -1;
// The thread already locked.
volatileLocked_ = true;
ChangeStatus(SCE_UTILITY_STATUS_RUNNING, 0);
return 0;
}

View file

@ -283,6 +283,12 @@ void UtilityDialogInitialize(UtilityDialogType type, int delayUs, int priority)
(u32_le)MIPS_MAKE_ORI(MIPS_REG_A0, MIPS_REG_S0, 0),
(u32_le)MIPS_MAKE_SYSCALL("sceUtility", "__UtilityWorkUs"),
// Now actually lock the volatile memory. Maybe this should be earlier...
(u32_le)MIPS_MAKE_ORI(MIPS_REG_A0, MIPS_REG_ZERO, 0),
(u32_le)MIPS_MAKE_ORI(MIPS_REG_A1, MIPS_REG_ZERO, 0),
(u32_le)MIPS_MAKE_ORI(MIPS_REG_A2, MIPS_REG_ZERO, 0),
(u32_le)MIPS_MAKE_SYSCALL("sceSuspendForUser", "sceKernelVolatileMemLock"),
(u32_le)MIPS_MAKE_ORI(MIPS_REG_A0, MIPS_REG_ZERO, (int)type),
(u32_le)MIPS_MAKE_JR_RA(),
(u32_le)MIPS_MAKE_SYSCALL("sceUtility", "__UtilityInitDialog"),