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

[tyndur-devel] [PATCH 1/4] kernel2: Erst Threads, dann Prozess zerstören



! kernel2: pm_thread_destroy() braucht den Prozess noch, also muss die
  Reihenfolge umgekehrt sein. Ist auch logischer, weil umgekehrte Reihenfolge
  der Initialisierung.

Signed-off-by: Kevin Wolf <kevin@xxxxxxxxxx>
---
 src/kernel2/src/tasks/pm.c |   16 ++++++++--------
 1 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/src/kernel2/src/tasks/pm.c b/src/kernel2/src/tasks/pm.c
index e3085c5..8219022 100644
--- a/src/kernel2/src/tasks/pm.c
+++ b/src/kernel2/src/tasks/pm.c
@@ -215,6 +215,7 @@ void pm_prepare_destroy(pm_process_t* process)
 void pm_destroy(pm_process_t* process)
 {
     struct on_destroy_info* info;
+    int i;
 
     // Der aktuelle Speicherkontext darf nicht zum zu zerstoerenden Task
     // gehoeren, sonst kriegen wir Probleme beim freigeben des Page Directory
@@ -222,6 +223,12 @@ void pm_destroy(pm_process_t* process)
         mmc_activate(&init_process.context);
     }
 
+    // Alle Threads loeschen
+    pm_thread_t* thread;
+    while ((thread = list_get_element_at(process->threads, 0))) {
+        pm_thread_destroy(thread);
+    }
+
     // Eventhandler ausfuehren
     while ((info = list_pop(process->on_destroy))) {
         info->handler(process, info->prv);
@@ -245,7 +252,7 @@ void pm_destroy(pm_process_t* process)
 
     // Den Prozess aus der Liste entfernen
     pm_process_t* _proc;
-    int i = 0;
+    i = 0;
     while ((_proc = list_get_element_at(process_list, i))) {
         // Wenn der Prozess gefunden wurde, wird er jetzt aus der Liste
         // gelöscht.
@@ -257,13 +264,6 @@ void pm_destroy(pm_process_t* process)
         i++;
     }
 
-    // Alle Threads loeschen
-    i = 0;
-    pm_thread_t* thread;
-    while ((thread = list_get_element_at(process->threads, i++))) {
-        pm_thread_destroy(thread);
-    }
-
     // Kommandozeile freigeben
     free(process->cmdline);
     
-- 
1.7.7