From 8925ad3fa08102c4c4ff2ef36cf5570ddf27c8cd Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Sat, 22 Aug 2020 16:34:49 +0200 Subject: [PATCH] Revert "Kernel: Move Singleton class to AK" This reverts commit f0906250a181c831508a45434b9f645ff98f33e4. --- AK/FlyString.cpp | 8 ++++---- Kernel/Console.cpp | 4 ++-- Kernel/Devices/BXVGADevice.cpp | 4 ++-- Kernel/Devices/Device.cpp | 4 ++-- Kernel/Devices/KeyboardDevice.cpp | 4 ++-- Kernel/Devices/NullDevice.cpp | 4 ++-- Kernel/Devices/PATAChannel.cpp | 4 ++-- Kernel/Devices/PS2MouseDevice.cpp | 4 ++-- Kernel/Devices/SB16.cpp | 4 ++-- Kernel/Devices/VMWareBackdoor.cpp | 4 ++-- Kernel/FileSystem/DevPtsFS.cpp | 4 ++-- Kernel/FileSystem/FIFO.cpp | 4 ++-- Kernel/FileSystem/FileSystem.cpp | 4 ++-- Kernel/FileSystem/Inode.cpp | 4 ++-- Kernel/FileSystem/VirtualFileSystem.cpp | 4 ++-- Kernel/Interrupts/APIC.cpp | 4 ++-- Kernel/Net/IPv4Socket.cpp | 4 ++-- Kernel/Net/LocalSocket.cpp | 4 ++-- Kernel/Net/LoopbackAdapter.cpp | 4 ++-- Kernel/Net/NetworkAdapter.cpp | 4 ++-- Kernel/Net/Routing.cpp | 4 ++-- Kernel/Net/TCPSocket.cpp | 13 +++++++------ Kernel/Net/UDPSocket.cpp | 4 ++-- Kernel/Random.cpp | 4 ++-- Kernel/SharedBuffer.cpp | 4 ++-- {AK => Kernel}/Singleton.h | 25 ++++--------------------- Kernel/TTY/PTYMultiplexer.cpp | 4 ++-- Kernel/Time/TimeManagement.cpp | 4 ++-- Kernel/TimerQueue.cpp | 4 ++-- Kernel/VM/MemoryManager.cpp | 4 ++-- Kernel/VM/PageDirectory.cpp | 4 ++-- 31 files changed, 71 insertions(+), 87 deletions(-) rename {AK => Kernel}/Singleton.h (87%) diff --git a/AK/FlyString.cpp b/AK/FlyString.cpp index e6e369c3f620f3..fdf2eed56afd4a 100644 --- a/AK/FlyString.cpp +++ b/AK/FlyString.cpp @@ -27,7 +27,6 @@ #include #include #include -#include #include #include #include @@ -48,11 +47,12 @@ struct FlyStringImplTraits : public AK::Traits { } }; -static auto s_table = make_singleton>(); - static HashTable& fly_impls() { - return *s_table; + static HashTable* table; + if (!table) + table = new HashTable; + return *table; } void FlyString::did_destroy_impl(Badge, StringImpl& impl) diff --git a/Kernel/Console.cpp b/Kernel/Console.cpp index c3fa023521768e..f1416cb535067b 100644 --- a/Kernel/Console.cpp +++ b/Kernel/Console.cpp @@ -24,16 +24,16 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#include #include #include #include +#include #include // Bytes output to 0xE9 end up on the Bochs console. It's very handy. #define CONSOLE_OUT_TO_E9 -static auto s_the = AK::make_singleton(); +static auto s_the = Kernel::make_singleton(); static Kernel::SpinLock g_console_lock; void Console::initialize() diff --git a/Kernel/Devices/BXVGADevice.cpp b/Kernel/Devices/BXVGADevice.cpp index ee822dac29b3f1..c31e6ec1f1c81f 100644 --- a/Kernel/Devices/BXVGADevice.cpp +++ b/Kernel/Devices/BXVGADevice.cpp @@ -25,11 +25,11 @@ */ #include -#include #include #include #include #include +#include #include #include #include @@ -57,7 +57,7 @@ namespace Kernel { #define VBE_DISPI_ENABLED 0x01 #define VBE_DISPI_LFB_ENABLED 0x40 -static auto s_the = AK::make_singleton(); +static auto s_the = make_singleton(); void BXVGADevice::initialize() { diff --git a/Kernel/Devices/Device.cpp b/Kernel/Devices/Device.cpp index e08a0ac6f510a7..d89a57506c31b1 100644 --- a/Kernel/Devices/Device.cpp +++ b/Kernel/Devices/Device.cpp @@ -24,14 +24,14 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#include #include #include +#include #include namespace Kernel { -static auto s_all_devices = AK::make_singleton>(); +static auto s_all_devices = make_singleton>(); HashMap& Device::all_devices() { diff --git a/Kernel/Devices/KeyboardDevice.cpp b/Kernel/Devices/KeyboardDevice.cpp index 192b54c721b4a0..2fd53797e6bdf4 100644 --- a/Kernel/Devices/KeyboardDevice.cpp +++ b/Kernel/Devices/KeyboardDevice.cpp @@ -26,12 +26,12 @@ #include #include -#include #include #include #include #include #include +#include #include //#define KEYBOARD_DEBUG @@ -336,7 +336,7 @@ void KeyboardDevice::handle_irq(const RegisterState&) } } -static auto s_the = AK::make_singleton(); +static auto s_the = make_singleton(); void KeyboardDevice::initialize() { diff --git a/Kernel/Devices/NullDevice.cpp b/Kernel/Devices/NullDevice.cpp index e879759d1de5bf..5e64920accc990 100644 --- a/Kernel/Devices/NullDevice.cpp +++ b/Kernel/Devices/NullDevice.cpp @@ -25,12 +25,12 @@ */ #include "NullDevice.h" -#include #include +#include namespace Kernel { -static auto s_the = AK::make_singleton(); +static auto s_the = make_singleton(); void NullDevice::initialize() { diff --git a/Kernel/Devices/PATAChannel.cpp b/Kernel/Devices/PATAChannel.cpp index 553acd412b819c..59295e5373fd4d 100644 --- a/Kernel/Devices/PATAChannel.cpp +++ b/Kernel/Devices/PATAChannel.cpp @@ -25,13 +25,13 @@ */ #include -#include #include #include #include #include #include #include +#include #include namespace Kernel { @@ -108,7 +108,7 @@ namespace Kernel { #define PCI_Mass_Storage_Class 0x1 #define PCI_IDE_Controller_Subclass 0x1 -static auto s_pata_lock = AK::make_singleton(); +static auto s_pata_lock = make_singleton(); static Lock& s_lock() { diff --git a/Kernel/Devices/PS2MouseDevice.cpp b/Kernel/Devices/PS2MouseDevice.cpp index 913b6d5c73e9a2..dfb5f01bec396b 100644 --- a/Kernel/Devices/PS2MouseDevice.cpp +++ b/Kernel/Devices/PS2MouseDevice.cpp @@ -25,10 +25,10 @@ */ #include -#include #include #include #include +#include namespace Kernel { @@ -57,7 +57,7 @@ namespace Kernel { //#define PS2MOUSE_DEBUG -static auto s_the = AK::make_singleton(); +static auto s_the = make_singleton(); PS2MouseDevice::PS2MouseDevice() : IRQHandler(IRQ_MOUSE) diff --git a/Kernel/Devices/SB16.cpp b/Kernel/Devices/SB16.cpp index 8e5611a8369852..38f81f26805371 100644 --- a/Kernel/Devices/SB16.cpp +++ b/Kernel/Devices/SB16.cpp @@ -25,13 +25,13 @@ */ #include -#include #include #include #include #include #include #include +#include //#define SB16_DEBUG @@ -77,7 +77,7 @@ void SB16::set_sample_rate(uint16_t hz) dsp_write((u8)hz); } -static auto s_the = AK::make_singleton(); +static auto s_the = make_singleton(); SB16::SB16() : IRQHandler(SB16_DEFAULT_IRQ) diff --git a/Kernel/Devices/VMWareBackdoor.cpp b/Kernel/Devices/VMWareBackdoor.cpp index 04499e522a7c4b..8ba15600daf691 100644 --- a/Kernel/Devices/VMWareBackdoor.cpp +++ b/Kernel/Devices/VMWareBackdoor.cpp @@ -26,13 +26,13 @@ #include #include -#include #include #include #include #include #include #include +#include namespace Kernel { @@ -111,7 +111,7 @@ class VMWareBackdoorDetector OwnPtr m_backdoor; }; -static auto s_vmware_backdoor = AK::make_singleton(); +static auto s_vmware_backdoor = make_singleton(); VMWareBackdoor* VMWareBackdoor::the() { diff --git a/Kernel/FileSystem/DevPtsFS.cpp b/Kernel/FileSystem/DevPtsFS.cpp index 2849b8f58b21f3..b3db215c5dcab4 100644 --- a/Kernel/FileSystem/DevPtsFS.cpp +++ b/Kernel/FileSystem/DevPtsFS.cpp @@ -24,11 +24,11 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#include #include #include #include #include +#include #include namespace Kernel { @@ -46,7 +46,7 @@ DevPtsFS::~DevPtsFS() { } -static auto s_ptys = AK::make_singleton>(); +static auto s_ptys = make_singleton>(); bool DevPtsFS::initialize() { diff --git a/Kernel/FileSystem/FIFO.cpp b/Kernel/FileSystem/FIFO.cpp index 52daa26f50d06c..670266cbcebfff 100644 --- a/Kernel/FileSystem/FIFO.cpp +++ b/Kernel/FileSystem/FIFO.cpp @@ -25,20 +25,20 @@ */ #include -#include #include #include #include #include #include #include +#include #include //#define FIFO_DEBUG namespace Kernel { -static auto s_table = AK::make_singleton>>(); +static auto s_table = make_singleton>>(); static Lockable>& all_fifos() { diff --git a/Kernel/FileSystem/FileSystem.cpp b/Kernel/FileSystem/FileSystem.cpp index 2a96fb6e6c41e5..450f401253b8de 100644 --- a/Kernel/FileSystem/FileSystem.cpp +++ b/Kernel/FileSystem/FileSystem.cpp @@ -26,19 +26,19 @@ #include #include -#include #include #include #include #include #include +#include #include #include namespace Kernel { static u32 s_lastFileSystemID; -static auto s_fs_map = AK::make_singleton>(); +static auto s_fs_map = make_singleton>(); static HashMap& all_fses() { diff --git a/Kernel/FileSystem/Inode.cpp b/Kernel/FileSystem/Inode.cpp index edfba2eac98918..c136ffc2a0b846 100644 --- a/Kernel/FileSystem/Inode.cpp +++ b/Kernel/FileSystem/Inode.cpp @@ -25,7 +25,6 @@ */ #include -#include #include #include #include @@ -34,12 +33,13 @@ #include #include #include +#include #include namespace Kernel { static SpinLock s_all_inodes_lock; -static auto s_list = AK::make_singleton>(); +static auto s_list = make_singleton>(); InlineLinkedList& Inode::all_with_lock() { diff --git a/Kernel/FileSystem/VirtualFileSystem.cpp b/Kernel/FileSystem/VirtualFileSystem.cpp index 9ea1a2d5c73516..cc0510a57021cb 100644 --- a/Kernel/FileSystem/VirtualFileSystem.cpp +++ b/Kernel/FileSystem/VirtualFileSystem.cpp @@ -25,7 +25,6 @@ */ #include -#include #include #include #include @@ -35,13 +34,14 @@ #include #include #include +#include #include //#define VFS_DEBUG namespace Kernel { -static auto s_the = AK::make_singleton(); +static auto s_the = make_singleton(); static constexpr int symlink_recursion_limit { 5 }; // FIXME: increase? static constexpr int root_mount_flags = MS_NODEV | MS_NOSUID | MS_RDONLY; diff --git a/Kernel/Interrupts/APIC.cpp b/Kernel/Interrupts/APIC.cpp index d92416ab9cf28a..d3e86af19de945 100644 --- a/Kernel/Interrupts/APIC.cpp +++ b/Kernel/Interrupts/APIC.cpp @@ -26,7 +26,6 @@ #include #include -#include #include #include #include @@ -35,6 +34,7 @@ #include #include #include +#include #include #include #include @@ -69,7 +69,7 @@ namespace Kernel { -static auto s_apic = AK::make_singleton(); +static auto s_apic = make_singleton(); class APICIPIInterruptHandler final : public GenericInterruptHandler { public: diff --git a/Kernel/Net/IPv4Socket.cpp b/Kernel/Net/IPv4Socket.cpp index 2861f1a90e3c25..8286e5a2e8d4ce 100644 --- a/Kernel/Net/IPv4Socket.cpp +++ b/Kernel/Net/IPv4Socket.cpp @@ -24,8 +24,8 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#include #include +#include #include #include #include @@ -46,7 +46,7 @@ namespace Kernel { -static auto s_table = AK::make_singleton>>(); +static auto s_table = make_singleton>>(); Lockable>& IPv4Socket::all_sockets() { diff --git a/Kernel/Net/LocalSocket.cpp b/Kernel/Net/LocalSocket.cpp index 6750f934038640..c703cc8ac6447e 100644 --- a/Kernel/Net/LocalSocket.cpp +++ b/Kernel/Net/LocalSocket.cpp @@ -24,12 +24,12 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#include #include #include #include #include #include +#include #include #include #include @@ -38,7 +38,7 @@ namespace Kernel { -static auto s_list = AK::make_singleton>>(); +static auto s_list = make_singleton>>(); Lockable>& LocalSocket::all_sockets() { diff --git a/Kernel/Net/LoopbackAdapter.cpp b/Kernel/Net/LoopbackAdapter.cpp index 6b858c9549f06e..27faa8bfadbef6 100644 --- a/Kernel/Net/LoopbackAdapter.cpp +++ b/Kernel/Net/LoopbackAdapter.cpp @@ -24,12 +24,12 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#include #include +#include namespace Kernel { -static auto s_loopback = AK::make_singleton(); +static auto s_loopback = make_singleton(); LoopbackAdapter& LoopbackAdapter::the() { diff --git a/Kernel/Net/NetworkAdapter.cpp b/Kernel/Net/NetworkAdapter.cpp index 898c95d7102840..936bf9a2e7f281 100644 --- a/Kernel/Net/NetworkAdapter.cpp +++ b/Kernel/Net/NetworkAdapter.cpp @@ -25,7 +25,6 @@ */ #include -#include #include #include #include @@ -34,11 +33,12 @@ #include #include #include +#include #include namespace Kernel { -static auto s_table = AK::make_singleton>>(); +static auto s_table = make_singleton>>(); static Lockable>& all_adapters() { diff --git a/Kernel/Net/Routing.cpp b/Kernel/Net/Routing.cpp index d73704cccfbad6..5f72ab1166248f 100644 --- a/Kernel/Net/Routing.cpp +++ b/Kernel/Net/Routing.cpp @@ -25,16 +25,16 @@ */ #include -#include #include #include #include +#include //#define ROUTING_DEBUG namespace Kernel { -static auto s_arp_table = AK::make_singleton>>(); +static auto s_arp_table = make_singleton>>(); Lockable>& arp_table() { diff --git a/Kernel/Net/TCPSocket.cpp b/Kernel/Net/TCPSocket.cpp index af7f5bb9f46a43..7b8c12a49cdb27 100644 --- a/Kernel/Net/TCPSocket.cpp +++ b/Kernel/Net/TCPSocket.cpp @@ -24,7 +24,6 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#include #include #include #include @@ -34,6 +33,7 @@ #include #include #include +#include //#define TCP_SOCKET_DEBUG @@ -63,18 +63,19 @@ void TCPSocket::set_state(State new_state) } } -static auto s_socket_closing = AK::make_singleton>>>(); - Lockable>>& TCPSocket::closing_sockets() { - return *s_socket_closing; + static Lockable>>* s_map; + if (!s_map) + s_map = new Lockable>>; + return *s_map; } -static auto s_socket_tuples = AK::make_singleton>>(); +static auto s_map = make_singleton>>(); Lockable>& TCPSocket::sockets_by_tuple() { - return *s_socket_tuples; + return *s_map; } RefPtr TCPSocket::from_tuple(const IPv4SocketTuple& tuple) diff --git a/Kernel/Net/UDPSocket.cpp b/Kernel/Net/UDPSocket.cpp index 27901a2e822bd4..ad5769667597a8 100644 --- a/Kernel/Net/UDPSocket.cpp +++ b/Kernel/Net/UDPSocket.cpp @@ -24,7 +24,6 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#include #include #include #include @@ -32,6 +31,7 @@ #include #include #include +#include namespace Kernel { @@ -42,7 +42,7 @@ void UDPSocket::for_each(Function callback) callback(*it.value); } -static auto s_map = AK::make_singleton>>(); +static auto s_map = make_singleton>>(); Lockable>& UDPSocket::sockets_by_port() { diff --git a/Kernel/Random.cpp b/Kernel/Random.cpp index 472f4519c572c8..b01b4aa5da6cee 100644 --- a/Kernel/Random.cpp +++ b/Kernel/Random.cpp @@ -25,15 +25,15 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#include #include #include #include +#include #include namespace Kernel { -static auto s_the = AK::make_singleton(); +static auto s_the = make_singleton(); KernelRng& KernelRng::the() { diff --git a/Kernel/SharedBuffer.cpp b/Kernel/SharedBuffer.cpp index a5186773a4f230..49401e15e01381 100644 --- a/Kernel/SharedBuffer.cpp +++ b/Kernel/SharedBuffer.cpp @@ -24,13 +24,13 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#include #include +#include #include namespace Kernel { -static auto s_map = AK::make_singleton>>>(); +static auto s_map = make_singleton>>>(); Lockable>>& shared_buffers() { diff --git a/AK/Singleton.h b/Kernel/Singleton.h similarity index 87% rename from AK/Singleton.h rename to Kernel/Singleton.h index 57962e3176869a..5271aa08eeeacc 100644 --- a/AK/Singleton.h +++ b/Kernel/Singleton.h @@ -26,33 +26,20 @@ #pragma once -#include #include -#include -#ifdef KERNEL #include -#endif -#ifndef __serenity__ -# include -#endif - -namespace AK { +namespace Kernel { template class Singleton { - AK_MAKE_NONCOPYABLE(Singleton); public: - Singleton() = default; - T* ptr() const { T* obj = AK::atomic_load(&m_obj, AK::memory_order_consume); if (FlatPtr(obj) <= 0x1) { // If this is the first time, see if we get to initialize it -#ifdef KERNEL - Kernel::ScopedCritical critical; -#endif + ScopedCritical critical; if (obj == nullptr && AK::atomic_compare_exchange_strong(&m_obj, obj, (T*)0x1, AK::memory_order_acq_rel)) { // We're the first one obj = InitFunction(); @@ -60,11 +47,7 @@ class Singleton { } else { // Someone else was faster, wait until they're done while (obj == (T*)0x1) { -#ifdef KERNEL - Kernel::Processor::wait_check(); -#else - // TODO: yield -#endif + Processor::wait_check(); obj = AK::atomic_load(&m_obj, AK::memory_order_consume); } } @@ -119,7 +102,7 @@ struct SingletonInstanceCreator { }; template -inline Singleton::create> make_singleton() +static Singleton::create> make_singleton() { return Singleton::create>(); } diff --git a/Kernel/TTY/PTYMultiplexer.cpp b/Kernel/TTY/PTYMultiplexer.cpp index c44a565ae9ba5b..4f8d48806e7ad4 100644 --- a/Kernel/TTY/PTYMultiplexer.cpp +++ b/Kernel/TTY/PTYMultiplexer.cpp @@ -26,9 +26,9 @@ #include "PTYMultiplexer.h" #include "MasterPTY.h" -#include #include #include +#include #include //#define PTMX_DEBUG @@ -36,7 +36,7 @@ namespace Kernel { static const unsigned s_max_pty_pairs = 8; -static auto s_the = AK::make_singleton(); +static auto s_the = make_singleton(); PTYMultiplexer& PTYMultiplexer::the() { diff --git a/Kernel/Time/TimeManagement.cpp b/Kernel/Time/TimeManagement.cpp index ff37fa33aafddd..7982c354b51abc 100644 --- a/Kernel/Time/TimeManagement.cpp +++ b/Kernel/Time/TimeManagement.cpp @@ -24,7 +24,6 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#include #include #include #include @@ -33,6 +32,7 @@ #include #include #include +#include #include #include @@ -40,7 +40,7 @@ namespace Kernel { -static auto s_the = AK::make_singleton(); +static auto s_the = make_singleton(); TimeManagement& TimeManagement::the() { diff --git a/Kernel/TimerQueue.cpp b/Kernel/TimerQueue.cpp index d12e4ecd52a1de..41197d6861feeb 100644 --- a/Kernel/TimerQueue.cpp +++ b/Kernel/TimerQueue.cpp @@ -27,14 +27,14 @@ #include #include #include -#include #include +#include #include #include namespace Kernel { -static auto s_the = AK::make_singleton(); +static auto s_the = make_singleton(); TimerQueue& TimerQueue::the() { diff --git a/Kernel/VM/MemoryManager.cpp b/Kernel/VM/MemoryManager.cpp index 9c984de81ee44a..8280503679e9cf 100644 --- a/Kernel/VM/MemoryManager.cpp +++ b/Kernel/VM/MemoryManager.cpp @@ -26,7 +26,6 @@ #include #include -#include #include #include #include @@ -40,6 +39,7 @@ #include #include #include +#include #include //#define MM_DEBUG @@ -51,7 +51,7 @@ extern FlatPtr end_of_kernel_bss; namespace Kernel { -static auto s_the = AK::make_singleton(); +static auto s_the = make_singleton(); RecursiveSpinLock s_mm_lock; MemoryManager& MM diff --git a/Kernel/VM/PageDirectory.cpp b/Kernel/VM/PageDirectory.cpp index 573caa28dbc726..1b15853d94881c 100644 --- a/Kernel/VM/PageDirectory.cpp +++ b/Kernel/VM/PageDirectory.cpp @@ -25,9 +25,9 @@ */ #include -#include #include #include +#include #include #include #include @@ -38,7 +38,7 @@ static const FlatPtr userspace_range_base = 0x00800000; static const FlatPtr userspace_range_ceiling = 0xbe000000; static const FlatPtr kernelspace_range_base = 0xc0800000; -static auto s_cr3_map = AK::make_singleton>(); +static auto s_cr3_map = make_singleton>(); static HashMap& cr3_map() {