Quellcode durchsuchen

LibGUI: Fix crash during HackStudio application teardown

We can't rely on a plain global WeakPtr during application teardown
since destruction order is not defined. Instead, use a NeverDestroyed
to hold the GUI::Application weak pointer. This way it will always
be reliable.

Fixes #3251.
Andreas Kling vor 4 Jahren
Ursprung
Commit
683ae4f7ad
1 geänderte Dateien mit 5 neuen und 4 gelöschten Zeilen
  1. 5 4
      Libraries/LibGUI/Application.cpp

+ 5 - 4
Libraries/LibGUI/Application.cpp

@@ -24,6 +24,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+#include <AK/NeverDestroyed.h>
 #include <LibCore/EventLoop.h>
 #include <LibGUI/Action.h>
 #include <LibGUI/Application.h>
@@ -39,17 +40,17 @@
 
 namespace GUI {
 
-static WeakPtr<Application> s_the;
+static NeverDestroyed<WeakPtr<Application>> s_the;
 
 Application* Application::the()
 {
-    return s_the;
+    return *s_the;
 }
 
 Application::Application(int argc, char** argv)
 {
-    ASSERT(!s_the);
-    s_the = make_weak_ptr();
+    ASSERT(!*s_the);
+    *s_the = make_weak_ptr();
     m_event_loop = make<Core::EventLoop>();
     WindowServerConnection::the();
     Clipboard::initialize({});