[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[tyndur-devel] [PATCH] kernel2: Aktiven Thread in pm_thread_destroy wechseln



! kernel2: Wir brauchen immer einen gültigen aktiven Thread, ansonsten
  fliegen selbst Dinge wie die Exceptionhandler auf die Schnauze.
  Anstatt erst nach dem Beenden eines Prozesses zum nächsten zu
  wechseln, wird jetzt beim Löschen des aktiven Threads geschedult.

Signed-off-by: Kevin Wolf <kevin@xxxxxxxxxx>
---
 src/kernel2/src/syscalls/pm.c  |    3 ---
 src/kernel2/src/tasks/thread.c |    7 +++++++
 2 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/src/kernel2/src/syscalls/pm.c b/src/kernel2/src/syscalls/pm.c
index f65018f..bb31d40 100644
--- a/src/kernel2/src/syscalls/pm.c
+++ b/src/kernel2/src/syscalls/pm.c
@@ -87,9 +87,6 @@ void syscall_pm_exit_process(void)
     // Genau jetzt muss der Prozess geloescht werden: Der Thread ist nicht mehr
     // aktiv, und er darf auch nicht wieder aktiviert werden.
     pm_destroy(old_task);
-
-    // Einen neuen Task holen.
-    current_thread = pm_scheduler_pop();
 }
 
 /**
diff --git a/src/kernel2/src/tasks/thread.c b/src/kernel2/src/tasks/thread.c
index ba6e569..618d369 100644
--- a/src/kernel2/src/tasks/thread.c
+++ b/src/kernel2/src/tasks/thread.c
@@ -142,6 +142,13 @@ void pm_thread_destroy(pm_thread_t* thread)
     // Beim Scheduler abmelden
     pm_scheduler_delete(thread);
 
+    // Wir brauchen immer einen gueltigen aktiven Thread, sonst kommt der
+    // Interrupthandler durcheinander und kann bei Exceptions im Kernel keine
+    // ordentliche Meldung mehr anzeigen.
+    if (current_thread == thread) {
+        current_thread = pm_scheduler_pop();
+    }
+
     // TODO: Den Userspacestack auch freigeben
 
     // Kernelstack freigeben
-- 
1.6.0.2