From 1d7142ed24ef370ae984c0441d5b325b42656bd7 Mon Sep 17 00:00:00 2001 From: Maximilian Schiller 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 popup = qobject_cast(factory()->container(QStringLiteral("session-popup-menu"), this)); -- cgit v1.1