summaryrefslogtreecommitdiff
blob: 5abcfa49969c667c16be2d2b05e357fe71379562 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
From 8accc777a5b3ab1e53341f1838ed636652dc1221 Mon Sep 17 00:00:00 2001
From: Vlad Zahorodnii <vlad.zahorodnii@kde.org>
Date: Mon, 13 Dec 2021 12:53:32 +0200
Subject: [PATCH] Fix memory leak in some plasma components

A few plasma components cache QSGTexture. Those components rely on
texture references going away with QSGNode users. However, with the
current tear down logic, OffscreenQuickView won't destroy any paint
nodes.

Destroy QQuickRenderControl before QQuickWindow to ensure that are no
paint nodes left alive after OffscreenQuickView.

BUG: 444429
BUG: 444381
BUG: 444077
BUG: 444306
(cherry picked from commit 64f2cdf9ed290a1fb7c2bf41753613078eb023c4)
---
 src/libkwineffects/kwineffectquickview.cpp | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/src/libkwineffects/kwineffectquickview.cpp b/src/libkwineffects/kwineffectquickview.cpp
index ca5a025729..14be1e1b25 100644
--- a/src/libkwineffects/kwineffectquickview.cpp
+++ b/src/libkwineffects/kwineffectquickview.cpp
@@ -160,13 +160,15 @@ EffectQuickView::EffectQuickView(QObject *parent, QWindow *renderWindow, ExportM
 EffectQuickView::~EffectQuickView()
 {
     if (d->m_glcontext) {
-        d->m_glcontext->makeCurrent(d->m_offscreenSurface.data());
         // close the view whilst we have an active GL context
-        delete d->m_view;
-        d->m_view = nullptr;
-        d->m_renderControl->invalidate();
-        d->m_glcontext->doneCurrent();
+        d->m_glcontext->makeCurrent(d->m_offscreenSurface.data());
     }
+
+    delete d->m_renderControl; // Always delete render control first.
+    d->m_renderControl = nullptr;
+
+    delete d->m_view;
+    d->m_view = nullptr;
 }
 
 bool EffectQuickView::automaticRepaint() const
-- 
GitLab