summaryrefslogtreecommitdiff
path: root/kde-apps/konsole/files/konsole-20.04.1-segfault-on-close.patch
blob: 55213878ad277c467b5ccd5233086f92d7f0ad27 (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
From 5e5129d51fa85036832f1af44ec5b875d426392f Mon Sep 17 00:00:00 2001
From: Maximilian Schiller <manimax3@outlook.de>
Date: Thu, 28 May 2020 22:57:29 +0200
Subject: [PATCH] Fix konsolepart Segfault when closed

Assign the _view as the parent to the KXMLGuiFactory because the factory
is referencing the view widget as its associated widget. Since the
TerminalDisplay gets destructed first this is now a dangling pointer.
If the view is set as the parent the factory gets cleaned up correctly.

Also cleanup the created clientBuilder after destruction because it
cant have a parent and would probably leak memory.

BUG: 415762
BUG: 421226
BUG: 421194
BUG: 421138
---
 src/SessionController.cpp | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/src/SessionController.cpp b/src/SessionController.cpp
index e72f342c4..99e185f5e 100644
--- a/src/SessionController.cpp
+++ b/src/SessionController.cpp
@@ -1732,11 +1732,13 @@ void SessionController::showDisplayContextMenu(const QPoint& position)
     if (factory() == nullptr) {
         if (clientBuilder() == nullptr) {
             setClientBuilder(new KXMLGUIBuilder(_view));
+
+            // Client builder does not get delted automatically
+            connect(this, &QObject::destroyed, this, [this]{ delete clientBuilder(); });
         }
 
-        auto factory = new KXMLGUIFactory(clientBuilder(), this);
+        auto factory = new KXMLGUIFactory(clientBuilder(), _view);
         factory->addClient(this);
-        ////qDebug() << "Created xmlgui factory" << factory;
     }
 
     QPointer<QMenu> popup = qobject_cast<QMenu*>(factory()->container(QStringLiteral("session-popup-menu"), this));
-- 
2.26.2