summaryrefslogtreecommitdiffstats
path: root/kde/patch/konsole/konsole.konsolepart.segfault.closing.after.contextmenu.patch
blob: fcdbb84729a843b6e59621d3fb0c0fe97ef3d619 (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
From 1d7142ed24ef370ae984c0441d5b325b42656bd7 Mon Sep 17 00:00:00 2001
From: Maximilian Schiller <manimax3@outlook.de>
Date: Fri, 29 May 2020 07:36:02 -0400
Subject: Fix konsolepart segfault when closing after showing context menu

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 can't have a parent and would probably leak memory.

BUG: 415762
FIXED-IN: 20.08.0
See also !87
---
 src/SessionController.cpp | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/src/SessionController.cpp b/src/SessionController.cpp
index e72f342..542955d 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 deleted 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));
-- 
cgit v1.1