commit:     6d1d167125f1054c910ed578e16233273e8cc43d
Author:     Andreas Sturmlechner <andreas.sturmlechner <AT> gmail <DOT> com>
AuthorDate: Thu Dec 17 22:45:31 2015 +0000
Commit:     Michael Palimaka <kensington <AT> gentoo <DOT> org>
CommitDate: Fri Dec 18 16:03:41 2015 +0000
URL:        https://gitweb.gentoo.org/proj/kde.git/commit/?id=6d1d1671

kde-apps/libakonadi: Fix possible crash on exit

Package-Manager: portage-2.2.24

 .../libakonadi-15.12.0-fix-possible-crash.patch    | 59 +++++++++++++++
 kde-apps/libakonadi/libakonadi-15.12.0-r1.ebuild   | 83 ++++++++++++++++++++++
 2 files changed, 142 insertions(+)

diff --git 
a/kde-apps/libakonadi/files/libakonadi-15.12.0-fix-possible-crash.patch 
b/kde-apps/libakonadi/files/libakonadi-15.12.0-fix-possible-crash.patch
new file mode 100644
index 0000000..5c3144c
--- /dev/null
+++ b/kde-apps/libakonadi/files/libakonadi-15.12.0-fix-possible-crash.patch
@@ -0,0 +1,59 @@
+From: Weng Xuetian <[email protected]>
+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/src/core/session.cpp
++++ b/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/src/core/session_p.h
++++ b/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;
+

diff --git a/kde-apps/libakonadi/libakonadi-15.12.0-r1.ebuild 
b/kde-apps/libakonadi/libakonadi-15.12.0-r1.ebuild
new file mode 100644
index 0000000..391ec29
--- /dev/null
+++ b/kde-apps/libakonadi/libakonadi-15.12.0-r1.ebuild
@@ -0,0 +1,83 @@
+# Copyright 1999-2015 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Id$
+
+EAPI=5
+
+KDE_DOXYGEN=true
+KDE_TEST=true
+KMNAME=kdepimlibs
+VIRTUALX_REQUIRED=test
+inherit kde5
+
+DESCRIPTION="Common akonadi libraries for PIM apps"
+KEYWORDS="~amd64 ~x86"
+LICENSE="LGPL-2.1"
+IUSE="designer tools"
+
+# some akonadi tests time out, that probably needs more work as it's ~700 tests
+RESTRICT="test"
+
+COMMON_DEPEND="
+       $(add_frameworks_dep kcompletion)
+       $(add_frameworks_dep kconfig)
+       $(add_frameworks_dep kconfigwidgets)
+       $(add_frameworks_dep kcoreaddons)
+       $(add_frameworks_dep kdbusaddons)
+       $(add_frameworks_dep kdesignerplugin)
+       $(add_frameworks_dep kguiaddons)
+       $(add_frameworks_dep ki18n)
+       $(add_frameworks_dep kiconthemes)
+       $(add_frameworks_dep kio)
+       $(add_frameworks_dep kitemmodels)
+       $(add_frameworks_dep kitemviews)
+       $(add_frameworks_dep kwidgetsaddons)
+       $(add_frameworks_dep kwindowsystem)
+       $(add_frameworks_dep kxmlgui)
+       $(add_kdeapps_dep akonadi)
+       dev-qt/qtdbus:5
+       dev-qt/qtgui:5
+       dev-qt/qtnetwork:5
+       dev-qt/qtsql:5
+       dev-qt/qtxml:5
+       dev-qt/qtwidgets:5
+       designer? ( dev-qt/designer:5 )
+       tools? ( dev-libs/libxml2 )
+"
+DEPEND="${COMMON_DEPEND}
+       dev-libs/boost
+       sys-devel/gettext
+"
+RDEPEND="${COMMON_DEPEND}
+       !kde-apps/kdepimlibs
+       !kde-base/kdepimlibs:4
+"
+
+REQUIRED_USE="test? ( tools )"
+
+if [[ ${KDE_BUILD_TYPE} = live ]] ; then
+       S="${WORKDIR}/${P}/akonadi"
+else
+       S="${WORKDIR}/${KMNAME}-${PV}/akonadi"
+fi
+
+src_prepare() {
+       epatch "${FILESDIR}/${PN}-15.11.80-testtools-optional.patch" \
+               "${FILESDIR}/${PN}-15.12.0-fix-possible-crash.patch"
+
+       if ! use tools ; then
+               sed -e "/add_subdirectory(xml)/ s/^/#DONT/" \
+                       -i src/CMakeLists.txt || die
+       fi
+
+       kde5_src_prepare
+}
+
+src_configure() {
+       local mycmakeargs=(
+               $(cmake-utils_use_find_package designer Qt5Designer)
+               $(cmake-utils_use_build tools)
+               $(cmake-utils_use_build test TESTING)
+       )
+       kde5_src_configure
+}

Reply via email to