diff --git a/Kernel/WorkQueue.cpp b/Kernel/WorkQueue.cpp index e3cea7b22b..cee1bd288e 100644 --- a/Kernel/WorkQueue.cpp +++ b/Kernel/WorkQueue.cpp @@ -1,10 +1,10 @@ /* * Copyright (c) 2021, the SerenityOS developers. + * Copyright (c) 2021, Andreas Kling * * SPDX-License-Identifier: BSD-2-Clause */ -#include #include #include #include @@ -29,11 +29,10 @@ UNMAP_AFTER_INIT WorkQueue::WorkQueue(StringView name) for (;;) { WorkItem* item; bool have_more; - { - SpinlockLocker lock(m_lock); - item = m_items.take_first(); - have_more = !m_items.is_empty(); - } + m_items.with([&](auto& items) { + item = items.take_first(); + have_more = !items.is_empty(); + }); if (item) { item->function(); delete item; @@ -50,10 +49,9 @@ UNMAP_AFTER_INIT WorkQueue::WorkQueue(StringView name) void WorkQueue::do_queue(WorkItem* item) { - { - SpinlockLocker lock(m_lock); - m_items.append(*item); - } + m_items.with([&](auto& items) { + items.append(*item); + }); m_wait_queue.wake_one(); } diff --git a/Kernel/WorkQueue.h b/Kernel/WorkQueue.h index c30a272c17..01191e5405 100644 --- a/Kernel/WorkQueue.h +++ b/Kernel/WorkQueue.h @@ -1,5 +1,6 @@ /* * Copyright (c) 2021, the SerenityOS developers. + * Copyright (c) 2021, Andreas Kling * * SPDX-License-Identifier: BSD-2-Clause */ @@ -8,6 +9,7 @@ #include #include +#include namespace Kernel { @@ -51,8 +53,7 @@ private: RefPtr m_thread; WaitQueue m_wait_queue; - IntrusiveList<&WorkItem::m_node> m_items; - Spinlock m_lock; + SpinlockProtected> m_items; }; }