Skip to content

Commit

Permalink
Revert "Kernel: Make sure threads which don't do any syscalls are t..."
Browse files Browse the repository at this point in the history
This reverts commit 3c3a172.

We cannot blindly kill threads just because they're not executing in a
system call. Being blocked (including in a page fault) needs proper
unblocking and potentially kernel stack cleanup before we can mark a
thread as Dying.

Fixes SerenityOS#8691
  • Loading branch information
tomuta authored and awesomekling committed Jul 13, 2021
1 parent 5521850 commit fa8fe40
Show file tree
Hide file tree
Showing 3 changed files with 0 additions and 19 deletions.
7 changes: 0 additions & 7 deletions Kernel/Scheduler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -217,13 +217,6 @@ bool Scheduler::pick_next()

ScopedSpinLock lock(g_scheduler_lock);

auto current_thread = Thread::current();
if (current_thread->should_die() && current_thread->may_die_immediately()) {
// Ordinarily the thread would die on syscall exit, however if the thread
// doesn't perform any syscalls we still need to mark it for termination here.
current_thread->set_state(Thread::Dying);
}

if constexpr (SCHEDULER_RUNNABLE_DEBUG) {
dump_thread_list();
}
Expand Down
9 changes: 0 additions & 9 deletions Kernel/Syscall.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
* SPDX-License-Identifier: BSD-2-Clause
*/

#include <AK/ScopeGuard.h>
#include <Kernel/API/Syscall.h>
#include <Kernel/Arch/x86/Interrupts.h>
#include <Kernel/Arch/x86/TrapFrame.h>
Expand Down Expand Up @@ -154,14 +153,6 @@ NEVER_INLINE void syscall_handler(TrapFrame* trap)
{
auto& regs = *trap->regs;
auto current_thread = Thread::current();
{
ScopedSpinLock lock(g_scheduler_lock);
current_thread->set_may_die_immediately(false);
}
ScopeGuard reset_may_die_immediately = [&current_thread] {
ScopedSpinLock lock(g_scheduler_lock);
current_thread->set_may_die_immediately(true);
};
VERIFY(current_thread->previous_mode() == Thread::PreviousMode::UserMode);
auto& process = current_thread->process();

Expand Down
3 changes: 0 additions & 3 deletions Kernel/Thread.h
Original file line number Diff line number Diff line change
Expand Up @@ -1187,8 +1187,6 @@ class Thread
bool is_profiling_suppressed() const { return m_is_profiling_suppressed; }
void set_profiling_suppressed() { m_is_profiling_suppressed = true; }

bool may_die_immediately() const { return m_may_die_immediately; }
void set_may_die_immediately(bool flag) { m_may_die_immediately = flag; }
InodeIndex global_procfs_inode_index() const { return m_global_procfs_inode_index; }

private:
Expand Down Expand Up @@ -1287,7 +1285,6 @@ class Thread
Kernel::Lock* m_blocking_lock { nullptr };
u32 m_lock_requested_count { 0 };
IntrusiveListNode<Thread> m_blocked_threads_list_node;
bool m_may_die_immediately { true };

#if LOCK_DEBUG
struct HoldingLockInfo {
Expand Down

0 comments on commit fa8fe40

Please sign in to comment.