Update submodule, add guards to cleaning up services.

This commit is contained in:
Steveice10 2016-12-28 09:01:04 -08:00
parent 319c10774a
commit 70fe88d04c
2 changed files with 55 additions and 18 deletions

@ -1 +1 @@
Subproject commit 4e6ed215ed961310609fb2b3ce6ebd2803a5e561 Subproject commit 2ef982ddbd9ae2d78052a42a2144fbc408bb30ea

View File

@ -13,22 +13,57 @@
#include "ui/ui.h" #include "ui/ui.h"
#include "ui/section/task/task.h" #include "ui/section/task/task.h"
static bool am_initialized = false;
static bool cfgu_initialized = false;
static bool ac_initialized = false;
static bool ptmu_initialized = false;
static bool pxidev_initialized = false;
static bool httpc_initialized = false;
static bool soc_initialized = false;
static void* soc_buffer = NULL; static void* soc_buffer = NULL;
static u32 old_time_limit = UINT32_MAX; static u32 old_time_limit = UINT32_MAX;
void cleanup_services() { void cleanup_services() {
if(soc_initialized) {
socExit(); socExit();
if(soc_buffer != NULL) { if(soc_buffer != NULL) {
free(soc_buffer); free(soc_buffer);
soc_buffer = NULL; soc_buffer = NULL;
} }
soc_initialized = false;
}
if(httpc_initialized) {
httpcExit(); httpcExit();
httpc_initialized = false;
}
if(pxidev_initialized) {
pxiDevExit(); pxiDevExit();
pxidev_initialized = false;
}
if(ptmu_initialized) {
ptmuExit(); ptmuExit();
ptmu_initialized = false;
}
if(ac_initialized) {
acExit(); acExit();
ac_initialized = false;
}
if(cfgu_initialized) {
cfguExit(); cfguExit();
cfgu_initialized = false;
}
if(am_initialized) {
amExit(); amExit();
am_initialized = false;
}
} }
Result init_services() { Result init_services() {
@ -38,15 +73,17 @@ Result init_services() {
if(R_SUCCEEDED(res = srvGetServiceHandle(&tempAM, "am:net"))) { if(R_SUCCEEDED(res = srvGetServiceHandle(&tempAM, "am:net"))) {
svcCloseHandle(tempAM); svcCloseHandle(tempAM);
if(R_SUCCEEDED(res = amInit()) if(R_SUCCEEDED(res = amInit()) && (am_initialized = true)
&& R_SUCCEEDED(res = cfguInit()) && R_SUCCEEDED(res = cfguInit()) && (cfgu_initialized = true)
&& R_SUCCEEDED(res = acInit()) && R_SUCCEEDED(res = acInit()) && (ac_initialized = true)
&& R_SUCCEEDED(res = ptmuInit()) && R_SUCCEEDED(res = ptmuInit()) && (ptmu_initialized = true)
&& R_SUCCEEDED(res = pxiDevInit()) && R_SUCCEEDED(res = pxiDevInit()) && (pxidev_initialized = true)
&& R_SUCCEEDED(res = httpcInit(0))) { && R_SUCCEEDED(res = httpcInit(0)) && (httpc_initialized = true)) {
soc_buffer = memalign(0x1000, 0x100000); soc_buffer = memalign(0x1000, 0x100000);
if(soc_buffer != NULL) { if(soc_buffer != NULL) {
res = socInit(soc_buffer, 0x100000); if(R_SUCCEEDED(res = socInit(soc_buffer, 0x100000))) {
soc_initialized = true;
}
} else { } else {
res = R_FBI_OUT_OF_MEMORY; res = R_FBI_OUT_OF_MEMORY;
} }