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.
This commit is contained in:
Andreas Kling 2020-08-22 13:08:39 +02:00
parent 0359a5ce27
commit 683ae4f7ad
Notes: sideshowbarker 2024-07-19 03:18:36 +09:00

View file

@ -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({});