From a812990f0d89181d3bf4ccd7524df105954157c9 Mon Sep 17 00:00:00 2001 From: TuxSH <1922548+TuxSH@users.noreply.github.com> Date: Sun, 8 Jan 2023 19:39:38 +0000 Subject: [PATCH] pm: mitigate libctru race condition+kernel bug (when doing dirty hb chainload) --- sysmodules/pm/source/termination.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/sysmodules/pm/source/termination.c b/sysmodules/pm/source/termination.c index 72a8dee..b48b7d1 100644 --- a/sysmodules/pm/source/termination.c +++ b/sysmodules/pm/source/termination.c @@ -419,6 +419,11 @@ static void ChainloadHomebrewDirtyAsync(void *argdata) } ProcessList_Unlock(&g_manager.processList); + // Account for race condition with libctru (till January 2023), causing + // a deadlock between svcExitProcess and svcTerminateProcess, which wouldn't happen + // if Nintendo were using proper atomics. + svcSleepThread(50 * 1000 * 1000LL); + res = commitPendingTerminations(3 * 1000 * 1000 * 1000LL); // 3s, what NS is using ExHeaderInfoHeap_Delete(exheaderInfo); g_manager.waitingForTermination = false;