Fix crash in XRenderPictureData::~XRenderPictureData

Summary:
If the XRender scene has cross-faded a window, then, eventually, KWin/X11 will
crash in the destructor of the XRenderPictureData class during tear down with
the following message in the terminal

```
ASSERT: "qApp" in file /home/vlad/Workspace/KDE/src/kde/workspace/kwin/libkwineffects/kwinxrenderutils.cpp, line 163
```

The crash happens because X11StandalonePlatform attempts to clean up XRender
resources, including XRenderUtils::s_blendPicture, after the application object
has been destroyed.

In order to fix the crash, we have to destroy the platform object before the
destructor of QCoreApplication is executed.

Test Plan:
- Enable maximize effect
- Maximize a window
- Replace the current instance of KWin/X11 with another one

Without this patch, KWin/X11 crashes after the third step.

Reviewers: #kwin, davidedmundson

Reviewed By: #kwin, davidedmundson

Subscribers: kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D25768
This commit is contained in:
Vlad Zahorodnii 2019-12-12 14:06:20 +02:00
parent 2c8ff56540
commit a7e18789cb
2 changed files with 8 additions and 0 deletions

View file

@ -161,6 +161,7 @@ Application::~Application()
{
delete options;
destroyAtoms();
destroyPlatform();
}
void Application::destroyAtoms()
@ -169,6 +170,12 @@ void Application::destroyAtoms()
atoms = nullptr;
}
void Application::destroyPlatform()
{
delete m_platform;
m_platform = nullptr;
}
void Application::resetCrashesCount()
{
crashes = 0;

1
main.h
View file

@ -231,6 +231,7 @@ protected:
emit x11ConnectionChanged();
}
void destroyAtoms();
void destroyPlatform();
void setTerminating() {
m_terminating = true;