فهرست منبع

Userland: Fix unnecessary heap allocation of singleton objects

In order to avoid having multiple instances, we were keeping a pointer
to these singleton objects and only allocating them when it was null.

We have `__cxa_guard_{acquire,release}` in the userland, so there's no
need to do this dance, as the compiler will ensure that the constructors
are only called once.
Daniel Bertalan 3 سال پیش
والد
کامیت
7d11edbe17

+ 2 - 4
Userland/Libraries/LibCore/Object.cpp

@@ -258,10 +258,8 @@ void Object::set_event_filter(Function<bool(Core::Event&)> filter)
 
 static HashMap<StringView, ObjectClassRegistration*>& object_classes()
 {
-    static HashMap<StringView, ObjectClassRegistration*>* map;
-    if (!map)
-        map = new HashMap<StringView, ObjectClassRegistration*>;
-    return *map;
+    static HashMap<StringView, ObjectClassRegistration*> s_map;
+    return s_map;
 }
 
 ObjectClassRegistration::ObjectClassRegistration(StringView class_name, Function<RefPtr<Object>()> factory, ObjectClassRegistration* parent_class)

+ 2 - 4
Userland/Libraries/LibGUI/Clipboard.cpp

@@ -44,10 +44,8 @@ void Clipboard::initialize(Badge<Application>)
 
 Clipboard& Clipboard::the()
 {
-    static Clipboard* s_the;
-    if (!s_the)
-        s_the = new Clipboard;
-    return *s_the;
+    static Clipboard s_the;
+    return s_the;
 }
 
 Clipboard::DataAndType Clipboard::fetch_data_and_type() const

+ 2 - 4
Userland/Libraries/LibGUI/Desktop.cpp

@@ -16,10 +16,8 @@ namespace GUI {
 
 Desktop& Desktop::the()
 {
-    static Desktop* the;
-    if (!the)
-        the = new Desktop;
-    return *the;
+    static Desktop s_the;
+    return s_the;
 }
 
 Desktop::Desktop()

+ 2 - 4
Userland/Libraries/LibGUI/DisplayLink.cpp

@@ -31,10 +31,8 @@ private:
 
 static HashMap<i32, RefPtr<DisplayLinkCallback>>& callbacks()
 {
-    static HashMap<i32, RefPtr<DisplayLinkCallback>>* map;
-    if (!map)
-        map = new HashMap<i32, RefPtr<DisplayLinkCallback>>;
-    return *map;
+    static HashMap<i32, RefPtr<DisplayLinkCallback>> s_map;
+    return s_map;
 }
 
 static i32 s_next_callback_id = 1;

+ 2 - 4
Userland/Libraries/LibGUI/Menu.cpp

@@ -20,10 +20,8 @@ static IDAllocator s_menu_id_allocator;
 
 static HashMap<int, Menu*>& all_menus()
 {
-    static HashMap<int, Menu*>* map;
-    if (!map)
-        map = new HashMap<int, Menu*>();
-    return *map;
+    static HashMap<int, Menu*> s_map;
+    return s_map;
 }
 
 Menu* Menu::from_menu_id(int menu_id)

+ 2 - 5
Userland/Libraries/LibGfx/FontDatabase.cpp

@@ -15,13 +15,10 @@
 
 namespace Gfx {
 
-static FontDatabase* s_the;
-
 FontDatabase& FontDatabase::the()
 {
-    if (!s_the)
-        s_the = new FontDatabase;
-    return *s_the;
+    static FontDatabase s_the;
+    return s_the;
 }
 
 static RefPtr<Font> s_default_font;

+ 2 - 2
Userland/Libraries/LibWeb/Loader/ContentFilter.cpp

@@ -11,8 +11,8 @@ namespace Web {
 
 ContentFilter& ContentFilter::the()
 {
-    static ContentFilter* filter = new ContentFilter;
-    return *filter;
+    static ContentFilter filter;
+    return filter;
 }
 
 ContentFilter::ContentFilter()

+ 2 - 4
Userland/Services/Clipboard/Storage.cpp

@@ -10,10 +10,8 @@ namespace Clipboard {
 
 Storage& Storage::the()
 {
-    static Storage* s_the;
-    if (!s_the)
-        s_the = new Storage;
-    return *s_the;
+    static Storage s_the;
+    return s_the;
 }
 
 Storage::Storage()

+ 2 - 4
Userland/Services/Taskbar/WindowList.cpp

@@ -8,10 +8,8 @@
 
 WindowList& WindowList::the()
 {
-    static WindowList* s_the;
-    if (!s_the)
-        s_the = new WindowList;
-    return *s_the;
+    static WindowList s_the;
+    return s_the;
 }
 
 Window* WindowList::find_parent(const Window& window)