diff --git a/nx/source/kernel/mutex.c b/nx/source/kernel/mutex.c index 9a94ccb1..e13f0e35 100644 --- a/nx/source/kernel/mutex.c +++ b/nx/source/kernel/mutex.c @@ -13,12 +13,12 @@ void mutexLock(Mutex* m) { u32 self = _GetTag(); u32 cur = __sync_val_compare_and_swap(&m->Tag, 0, self); - if (cur == 0) { - // We won the race! - return; - } - while (1) { + if (cur == 0) { + // We won the race! + return; + } + if ((cur &~ HAS_LISTENERS) == self) { // Kernel assigned it to us! return; @@ -39,11 +39,6 @@ void mutexLock(Mutex* m) { } cur = __sync_val_compare_and_swap(&m->Tag, 0, self); - - if (cur == 0) { - // We won the race! - return; - } } } diff --git a/nx/source/services/fs.c b/nx/source/services/fs.c index d4251ff9..dd3c22d6 100644 --- a/nx/source/services/fs.c +++ b/nx/source/services/fs.c @@ -7,36 +7,34 @@ Result fsInitialize() { Result rc = smGetService(&g_fsHandle, "fsp-srv"); if (R_SUCCEEDED(rc)) { + IpcCommand c; + ipcInitialize(&c); + ipcSendPid(&c); + + struct { + u64 magic; + u64 cmd_id; + u64 unk; + } *raw; + + raw = ipcPrepareHeader(&c, sizeof(*raw)); + + raw->magic = SFCI_MAGIC; + raw->cmd_id = 1; + raw->unk = 0; + + rc = ipcDispatch(g_fsHandle); + if (R_SUCCEEDED(rc)) { - IpcCommand c; - ipcInitialize(&c); - ipcSendPid(&c); + IpcCommandResponse r; + ipcParseResponse(&r); struct { u64 magic; - u64 cmd_id; - u64 unk; - } *raw; + u64 result; + } *resp = r.Raw; - raw = ipcPrepareHeader(&c, sizeof(*raw)); - - raw->magic = SFCI_MAGIC; - raw->cmd_id = 1; - raw->unk = 0; - - rc = ipcDispatch(g_fsHandle); - - if (R_SUCCEEDED(rc)) { - IpcCommandResponse r; - ipcParseResponse(&r); - - struct { - u64 magic; - u64 result; - } *resp = r.Raw; - - rc = resp->result; - } + rc = resp->result; } }