[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