浏览代码

Kernel: Delete non-main threads immediately after finalizing them

Previously we would wait until the whole process died before actually
deleting its threads.
Andreas Kling 6 年之前
父节点
当前提交
3ad6ae1842
共有 1 个文件被更改,包括 8 次插入1 次删除
  1. 8 1
      Kernel/Thread.cpp

+ 8 - 1
Kernel/Thread.cpp

@@ -157,15 +157,22 @@ const char* Thread::state_string() const
 
 
 void Thread::finalize()
 void Thread::finalize()
 {
 {
+    ASSERT(current == g_finalizer);
+
     dbgprintf("Finalizing Thread %u in %s(%u)\n", tid(), m_process.name().characters(), pid());
     dbgprintf("Finalizing Thread %u in %s(%u)\n", tid(), m_process.name().characters(), pid());
     set_state(Thread::State::Dead);
     set_state(Thread::State::Dead);
 
 
-    if (this == &m_process.main_thread())
+    if (this == &m_process.main_thread()) {
         m_process.finalize();
         m_process.finalize();
+        return;
+    }
+
+    delete this;
 }
 }
 
 
 void Thread::finalize_dying_threads()
 void Thread::finalize_dying_threads()
 {
 {
+    ASSERT(current == g_finalizer);
     Vector<Thread*, 32> dying_threads;
     Vector<Thread*, 32> dying_threads;
     {
     {
         InterruptDisabler disabler;
         InterruptDisabler disabler;