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