mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 06:58:11 +00:00
Kernel: Implement FUTEX_WAKE of arbitrary count.
Previously we just woke all waiters no matter how many were requested. Fix this by implementing WaitQueue::wake_n(..).
This commit is contained in:
parent
e8f6f655bf
commit
1f64e3eb16
3 changed files with 17 additions and 2 deletions
|
@ -55,6 +55,21 @@ void WaitQueue::wake_one(Atomic<bool>* lock)
|
|||
Scheduler::stop_idling();
|
||||
}
|
||||
|
||||
void WaitQueue::wake_n(i32 wake_count)
|
||||
{
|
||||
InterruptDisabler disabler;
|
||||
if (m_threads.is_empty())
|
||||
return;
|
||||
|
||||
for (i32 i = 0; i < wake_count; ++i) {
|
||||
Thread* thread = m_threads.take_first();
|
||||
if (!thread)
|
||||
break;
|
||||
thread->wake_from_queue();
|
||||
}
|
||||
Scheduler::stop_idling();
|
||||
}
|
||||
|
||||
void WaitQueue::wake_all()
|
||||
{
|
||||
InterruptDisabler disabler;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue