mirror of
https://gitdl.cn/https://github.com/chakralinux/desktop.git
synced 2025-01-25 02:52:13 +08:00
60 lines
1.9 KiB
Diff
60 lines
1.9 KiB
Diff
From: Weng Xuetian <wengxt@gmail.com>
|
|
Date: Thu, 17 Dec 2015 16:19:36 +0000
|
|
Subject: Fix possible crash upon application exits (e.g. kmail)
|
|
X-Git-Url: http://quickgit.kde.org/?p=kdepimlibs.git&a=commitdiff&h=c6bf33a9018587e96a350bfd0b2bffde1859db27
|
|
---
|
|
Fix possible crash upon application exits (e.g. kmail)
|
|
|
|
Qt lambda connection will not automatically disconnect if no context
|
|
qobject is provided. Since SessionPrivate is not a qobject, disconnect
|
|
the connection in the destructor to prevent accessing deleted object.
|
|
|
|
REVIEW: 126395
|
|
---
|
|
|
|
|
|
--- a/akonadi/src/core/session.cpp
|
|
+++ b/akonadi/src/core/session.cpp
|
|
@@ -301,15 +301,16 @@
|
|
// Shutdown the thread before QApplication event loop quits - the
|
|
// thread()->wait() mechanism in ConnectionThread dtor crashes sometimes
|
|
// when called from QApplication destructor
|
|
- QObject::connect(qApp, &QCoreApplication::aboutToQuit,
|
|
- [this]() {
|
|
- delete connThread;
|
|
- connThread = Q_NULLPTR;
|
|
- });
|
|
+ connThreadCleanUp = QObject::connect(qApp, &QCoreApplication::aboutToQuit,
|
|
+ [this]() {
|
|
+ delete connThread;
|
|
+ connThread = Q_NULLPTR;
|
|
+ });
|
|
}
|
|
|
|
SessionPrivate::~SessionPrivate()
|
|
{
|
|
+ QObject::disconnect(connThreadCleanUp);
|
|
delete connThread;
|
|
}
|
|
|
|
|
|
--- a/akonadi/src/core/session_p.h
|
|
+++ b/akonadi/src/core/session_p.h
|
|
@@ -29,6 +29,7 @@
|
|
|
|
#include <QtCore/QQueue>
|
|
#include <QtCore/QThreadStorage>
|
|
+#include <QtCore/QMetaObject>
|
|
#include <QFile>
|
|
|
|
class QIODevice;
|
|
@@ -125,6 +126,7 @@
|
|
Session *mParent;
|
|
QThread *thread;
|
|
ConnectionThread *connThread;
|
|
+ QMetaObject::Connection connThreadCleanUp;
|
|
QByteArray sessionId;
|
|
bool connected;
|
|
qint64 theNextTag;
|
|
|