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 +}
