From 2ddee7016e9ddb19a2a861ee7aedfa21ea98419f Mon Sep 17 00:00:00 2001 From: Bananymous Date: Tue, 14 Jul 2026 00:56:57 +0300 Subject: [PATCH] Kernel: Fix another scheduler bug :^) --- kernel/kernel/Scheduler.cpp | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/kernel/kernel/Scheduler.cpp b/kernel/kernel/Scheduler.cpp index 4339f4e5..7787aff8 100644 --- a/kernel/kernel/Scheduler.cpp +++ b/kernel/kernel/Scheduler.cpp @@ -310,14 +310,7 @@ namespace Kernel const uint64_t current_ns = SystemTimer::get().ns_since_boot(); while (!m_block_queue.empty() && current_ns >= m_block_queue.front()->wake_time_ns) - { - auto* node = m_block_queue.pop_front(); - if (auto* blocker = node->blocker.load()) - blocker->remove_thread_from_block_queue(node); - node->blocked = false; - update_most_loaded_node_queue(node, &m_run_queue); - m_run_queue.add_thread_to_back(node); - } + unblock_thread(m_block_queue.front()); } void Scheduler::update_wake_up_deadline() @@ -388,12 +381,14 @@ namespace Kernel if (!node->blocked) return; ASSERT(node != m_current); + Processor::set_disable_smp_messages(true); m_block_queue.remove_node(node); if (auto* blocker = node->blocker.load()) blocker->remove_thread_from_block_queue(node); node->blocked = false; m_run_queue.add_thread_to_back(node); update_most_loaded_node_queue(node, &m_run_queue); + Processor::set_disable_smp_messages(false); } else {