From 5773efa18db22812debf766e8125fd112621e4a2 Mon Sep 17 00:00:00 2001
From: Terraneo Federico <fede.tft@miosix.org>
Date: Sat, 11 Jan 2025 15:48:57 +0100
Subject: [PATCH] Improve process fault logic

---
 miosix/kernel/process.cpp | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/miosix/kernel/process.cpp b/miosix/kernel/process.cpp
index 5389cc1c..b179e545 100644
--- a/miosix/kernel/process.cpp
+++ b/miosix/kernel/process.cpp
@@ -299,16 +299,17 @@ void *Process::start(void *)
         unsigned int entry=proc->program.getEntryPoint();
         Thread::setupUserspaceContext(entry,proc->argc,proc->argvSp,proc->envp,
             proc->image.getProcessBasePointer(),proc->image.getMainStackSize());
-        SvcResult svcResult=Resume;
+        SvcResult svcResult;
         do {
             SyscallParameters sp=Thread::switchToUserspace();
 
             bool fault=proc->fault.faultHappened();
-            //Handle svc only if no fault occurred
-            if(fault==false) svcResult=proc->handleSvc(sp);
+            if(fault) svcResult=Segfault;
+            else svcResult=proc->handleSvc(sp); //Handle svc only if no fault
 
             if(Thread::testTerminate() || svcResult==Exit) running=false;
-            if(fault || svcResult==Segfault)
+            //Segfault either because fault==true or handleSvc returned Segfault
+            if(svcResult==Segfault)
             {
                 running=false;
                 proc->exitCode=SIGSEGV; //Segfault
-- 
GitLab