diff --git a/sysmodules/rosalina/rosalina.rsf b/sysmodules/rosalina/rosalina.rsf index d9f09fb..53eb796 100644 --- a/sysmodules/rosalina/rosalina.rsf +++ b/sysmodules/rosalina/rosalina.rsf @@ -21,7 +21,7 @@ AccessControlInfo: IdealProcessor : 1 AffinityMask : 3 - Priority : 20 + Priority : 25 # 55 DisableDebug : false EnableForceDebug : true diff --git a/sysmodules/rosalina/source/errdisp.c b/sysmodules/rosalina/source/errdisp.c index f81d9af..5201647 100644 --- a/sysmodules/rosalina/source/errdisp.c +++ b/sysmodules/rosalina/source/errdisp.c @@ -48,7 +48,7 @@ static char staticBuf[0x100 + 1] = {0}; MyThread *errDispCreateThread(void) { - if(R_FAILED(MyThread_Create(&errDispThread, errDispThreadMain, errDispThreadStack, 0xD00, 0x18, CORE_SYSTEM))) + if(R_FAILED(MyThread_Create(&errDispThread, errDispThreadMain, errDispThreadStack, 0xD00, 55, CORE_SYSTEM))) svcBreak(USERBREAK_PANIC); return &errDispThread; } diff --git a/sysmodules/rosalina/source/main.c b/sysmodules/rosalina/source/main.c index f8869da..5e88cbe 100644 --- a/sysmodules/rosalina/source/main.c +++ b/sysmodules/rosalina/source/main.c @@ -90,13 +90,14 @@ void exit(int rc) // TODO: make pm terminate rosalina __libc_fini_array(); - acExit(); + // Kernel will take care of it all + /*acExit(); pmDbgExit(); fsExit(); svcCloseHandle(*fsRegGetSessionHandle()); srvExit(); - - __sync_fini(); + __sync_fini();*/ + svcExitProcess(); } diff --git a/sysmodules/rosalina/source/task_runner.c b/sysmodules/rosalina/source/task_runner.c index b651349..589e4b2 100644 --- a/sysmodules/rosalina/source/task_runner.c +++ b/sysmodules/rosalina/source/task_runner.c @@ -7,10 +7,12 @@ TaskRunner g_taskRunner; static MyThread taskRunnerThread; static u8 ALIGN(8) taskRunnerThreadStack[0x1000]; +extern bool terminationRequest; + MyThread *taskRunnerCreateThread(void) { TaskRunner_Init(); - MyThread_Create(&taskRunnerThread, TaskRunner_HandleTasks, taskRunnerThreadStack, THREAD_STACK_SIZE, 0x20, 1); + MyThread_Create(&taskRunnerThread, TaskRunner_HandleTasks, taskRunnerThreadStack, THREAD_STACK_SIZE, 58, 1); return &taskRunnerThread; } @@ -32,7 +34,7 @@ void TaskRunner_RunTask(void (*task)(void *argdata), void *argdata, size_t argsi void TaskRunner_HandleTasks(void) { - for (;;) { + while (!terminationRequest) { LightEvent_Signal(&g_taskRunner.readyEvent); LightEvent_Wait(&g_taskRunner.parametersSetEvent); g_taskRunner.task(g_taskRunner.argStorage); @@ -42,4 +44,4 @@ void TaskRunner_HandleTasks(void) void TaskRunner_WaitReady(void) { LightEvent_Wait(&g_taskRunner.readyEvent); -} \ No newline at end of file +}