From 14ac77131b8474bd8004dda2821989a490b747da Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Mon, 29 Apr 2019 15:56:25 +0200 Subject: [PATCH] Kernel: The exit_thread() syscall should unlock the big lock. Since exit_thread() never returns, it can't rely on the syscall trap handler to unlock the big lock before returning. --- Kernel/Process.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Kernel/Process.cpp b/Kernel/Process.cpp index b18ea40ebd..21b1846929 100644 --- a/Kernel/Process.cpp +++ b/Kernel/Process.cpp @@ -2445,12 +2445,13 @@ int Process::sys$create_thread(int(*entry)(void*), void* argument) void Process::sys$exit_thread(int code) { - InterruptDisabler disabler; + cli(); if (¤t->process().main_thread() == current) { sys$exit(code); return; } current->set_state(Thread::State::Dying); + big_lock().unlock_if_locked(); Scheduler::pick_next_and_switch_now(); ASSERT_NOT_REACHED(); }