From 9683e021eaa27e36e84133b0a58e34b45cec161a Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Sun, 16 Jun 2013 22:26:19 -0700 Subject: [PATCH] Fix return on atrac release, fix deinit/reinit. --- Core/HLE/sceAtrac.cpp | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/Core/HLE/sceAtrac.cpp b/Core/HLE/sceAtrac.cpp index d3fbf8972c..ba320148bc 100644 --- a/Core/HLE/sceAtrac.cpp +++ b/Core/HLE/sceAtrac.cpp @@ -347,8 +347,14 @@ int createAtrac(Atrac *atrac, int codecType) { } int deleteAtrac(int atracID) { - delete atracIDs[atracID]; - atracIDs[atracID] = NULL; + if (atracID >= 0 && atracID < PSP_NUM_ATRAC_IDS) { + if (atracIDs[atracID] != NULL) { + delete atracIDs[atracID]; + atracIDs[atracID] = NULL; + + return 0; + } + } return ATRAC_ERROR_BAD_ATRACID; } @@ -1266,11 +1272,13 @@ int sceAtracReinit(int at3Count, int at3plusCount) // If we ran out of space, we still initialize some, but return an error. int result = space >= 0 ? 0 : SCE_KERNEL_ERROR_OUT_OF_MEMORY; - if (atracInited) { + if (atracInited || next == 0) { INFO_LOG(HLE, "sceAtracReinit(%d, %d)", at3Count, at3plusCount); + atracInited = true; return result; } else { INFO_LOG(HLE, "sceAtracReinit(%d, %d): init", at3Count, at3plusCount); + atracInited = true; return hleDelayResult(result, "atrac reinit", 400); } }