Kernel: Fix another scheduler bug :^)
This commit is contained in:
@@ -310,14 +310,7 @@ namespace Kernel
|
|||||||
|
|
||||||
const uint64_t current_ns = SystemTimer::get().ns_since_boot();
|
const uint64_t current_ns = SystemTimer::get().ns_since_boot();
|
||||||
while (!m_block_queue.empty() && current_ns >= m_block_queue.front()->wake_time_ns)
|
while (!m_block_queue.empty() && current_ns >= m_block_queue.front()->wake_time_ns)
|
||||||
{
|
unblock_thread(m_block_queue.front());
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Scheduler::update_wake_up_deadline()
|
void Scheduler::update_wake_up_deadline()
|
||||||
@@ -388,12 +381,14 @@ namespace Kernel
|
|||||||
if (!node->blocked)
|
if (!node->blocked)
|
||||||
return;
|
return;
|
||||||
ASSERT(node != m_current);
|
ASSERT(node != m_current);
|
||||||
|
Processor::set_disable_smp_messages(true);
|
||||||
m_block_queue.remove_node(node);
|
m_block_queue.remove_node(node);
|
||||||
if (auto* blocker = node->blocker.load())
|
if (auto* blocker = node->blocker.load())
|
||||||
blocker->remove_thread_from_block_queue(node);
|
blocker->remove_thread_from_block_queue(node);
|
||||||
node->blocked = false;
|
node->blocked = false;
|
||||||
m_run_queue.add_thread_to_back(node);
|
m_run_queue.add_thread_to_back(node);
|
||||||
update_most_loaded_node_queue(node, &m_run_queue);
|
update_most_loaded_node_queue(node, &m_run_queue);
|
||||||
|
Processor::set_disable_smp_messages(false);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user