NDSP: some more safety checks and fixes

This commit is contained in:
fincs 2015-10-24 13:47:31 +02:00
parent b3e6a64596
commit 8cc5dec1b2

View File

@ -278,10 +278,12 @@ static void ndspFinalize(bool suspend)
bool ready;
DSP_RecvDataIsReady(0, &ready);
if (ready)
{
DSP_RecvData(0, &val);
if (val == 1)
break;
}
}
if (suspend)
memcpy(dspVar5Backup, ndspVars[5][0], sizeof(dspVar5Backup));
@ -464,7 +466,8 @@ Result ndspInit(void)
if (rc==0)
{
u8 outMode;
CFGU_GetConfigInfoBlk2(sizeof(outMode), 0x70001, &outMode);
rc = CFGU_GetConfigInfoBlk2(sizeof(outMode), 0x70001, &outMode);
if (rc==0)
ndspMaster.outputMode = outMode;
exitCfgu();
}
@ -502,14 +505,20 @@ _fail0:
void ndspExit(void)
{
if (!ndspRefCount) return;
if (--ndspRefCount) return;
if (!bDspReady) return;
ndspThreadRun = false;
if (bSleeping)
svcSignalEvent(sleepEvent);
svcWaitSynchronization(ndspThread, U64_MAX);
svcCloseHandle(ndspThread);
svcCloseHandle(sleepEvent);
aptUnhook(&aptCookie);
if (!bSleeping)
ndspFinalize(false);
bSleeping = false;
bNeedsSync = false;
dspExit();
if (componentFree)
{