forked from gentoo/gentoo
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
dev-qt/qtcore: backport patch from upstream that resolves various cra…
…shes Gentoo-bug: 581068 Package-Manager: portage-2.3.2
- Loading branch information
Michael Palimaka
committed
Nov 17, 2016
1 parent
6f7203d
commit 5ebe88c
Showing
2 changed files
with
124 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,81 @@ | ||
From ca4d93d85ee446c5e30ec8e7814651e45cbf1218 Mon Sep 17 00:00:00 2001 | ||
From: Thiago Macieira <[email protected]> | ||
Date: Thu, 12 Nov 2015 10:14:51 -0800 | ||
Subject: Stop unloading plugins in QPluginLoader and QFactoryLoader | ||
|
||
QPluginLoader hasn't unloaded in its destructor since Qt 5.0, but we | ||
missed the equivalent code in QFactoryLoader (which bypasses | ||
QPluginLoader). Besides, QPluginLoader::unload() was still doing | ||
unloading, which it won't anymore. | ||
|
||
Not unloading plugins is Qt's policy, as decided during the 5.0 | ||
development process and reaffirmed now in 5.6. This is due to static | ||
data in plugins leaking out and remaining in use past the unloading of | ||
the plugin, causing crashes. | ||
|
||
This does not affect QLibrary and QLibrary::unload(). Those are meant | ||
for non-Qt loadable modules, so unloading them may be safe. | ||
|
||
Task-number: QTBUG-49061 | ||
Discussed-on: http://lists.qt-project.org/pipermail/development/2015-November/023681.html | ||
Change-Id: I461e9fc7199748faa187ffff1416070f138df8db | ||
(cherry picked from commit 494376f980e96339b6f1eff7c41336ca4d853065) | ||
Discussed-again-on: http://lists.qt-project.org/pipermail/development/2016-October/027476.html | ||
Reviewed-by: Lars Knoll <[email protected]> | ||
--- | ||
src/corelib/plugin/qfactoryloader.cpp | 6 ++++-- | ||
src/corelib/plugin/qpluginloader.cpp | 5 +++-- | ||
2 files changed, 7 insertions(+), 4 deletions(-) | ||
|
||
diff --git a/src/corelib/plugin/qfactoryloader.cpp b/src/corelib/plugin/qfactoryloader.cpp | ||
index dcf1b1a..b6558f5 100644 | ||
--- a/src/corelib/plugin/qfactoryloader.cpp | ||
+++ b/src/corelib/plugin/qfactoryloader.cpp | ||
@@ -208,10 +208,12 @@ void QFactoryLoader::update() | ||
++keyUsageCount; | ||
} | ||
} | ||
- if (keyUsageCount || keys.isEmpty()) | ||
+ if (keyUsageCount || keys.isEmpty()) { | ||
+ library->setLoadHints(QLibrary::PreventUnloadHint); // once loaded, don't unload | ||
d->libraryList += library; | ||
- else | ||
+ } else { | ||
library->release(); | ||
+ } | ||
} | ||
} | ||
#else | ||
diff --git a/src/corelib/plugin/qpluginloader.cpp b/src/corelib/plugin/qpluginloader.cpp | ||
index 37f2368..0ea8280 100644 | ||
--- a/src/corelib/plugin/qpluginloader.cpp | ||
+++ b/src/corelib/plugin/qpluginloader.cpp | ||
@@ -148,6 +148,7 @@ QPluginLoader::QPluginLoader(const QString &fileName, QObject *parent) | ||
: QObject(parent), d(0), did_load(false) | ||
{ | ||
setFileName(fileName); | ||
+ setLoadHints(QLibrary::PreventUnloadHint); | ||
} | ||
|
||
/*! | ||
@@ -342,7 +343,7 @@ static QString locatePlugin(const QString& fileName) | ||
void QPluginLoader::setFileName(const QString &fileName) | ||
{ | ||
#if defined(QT_SHARED) | ||
- QLibrary::LoadHints lh; | ||
+ QLibrary::LoadHints lh = QLibrary::PreventUnloadHint; | ||
if (d) { | ||
lh = d->loadHints(); | ||
d->release(); | ||
@@ -391,7 +392,7 @@ Q_GLOBAL_STATIC(StaticPluginList, staticPluginList) | ||
\brief Give the load() function some hints on how it should behave. | ||
|
||
You can give hints on how the symbols in the plugin are | ||
- resolved. By default, none of the hints are set. | ||
+ resolved. By default since Qt 5.7, QLibrary::PreventUnloadHint is set. | ||
|
||
See the documentation of QLibrary::loadHints for a complete | ||
description of how this property works. | ||
-- | ||
cgit v1.0-4-g1e03 | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
# Copyright 1999-2016 Gentoo Foundation | ||
# Distributed under the terms of the GNU General Public License v2 | ||
# $Id$ | ||
|
||
EAPI=6 | ||
QT5_MODULE="qtbase" | ||
inherit qt5-build | ||
|
||
DESCRIPTION="Cross-platform application development framework" | ||
|
||
if [[ ${QT5_BUILD_TYPE} == release ]]; then | ||
KEYWORDS="~amd64 ~arm ~arm64 ~hppa ~ppc ~ppc64 ~x86" | ||
fi | ||
|
||
IUSE="icu systemd" | ||
|
||
DEPEND=" | ||
dev-libs/glib:2 | ||
>=dev-libs/libpcre-8.38[pcre16,unicode] | ||
>=sys-libs/zlib-1.2.5 | ||
virtual/libiconv | ||
icu? ( dev-libs/icu:= ) | ||
systemd? ( sys-apps/systemd:= ) | ||
" | ||
RDEPEND="${DEPEND}" | ||
|
||
PATCHES=( "${FILESDIR}/${P}-plugins.patch" ) | ||
|
||
QT5_TARGET_SUBDIRS=( | ||
src/tools/bootstrap | ||
src/tools/moc | ||
src/tools/rcc | ||
src/corelib | ||
src/tools/qlalr | ||
) | ||
|
||
src_configure() { | ||
local myconf=( | ||
$(qt_use icu) | ||
$(qt_use systemd journald) | ||
) | ||
qt5-build_src_configure | ||
} |