[SCM] qtbase packaging branch, ubuntu, updated. ubuntu/5.6.1+dfsg-3ubuntu6-2-g3b7b32f

Timo Jyrinki timo at moszumanska.debian.org
Thu Oct 13 13:22:38 UTC 2016


Gitweb-URL: http://git.debian.org/?p=pkg-kde/qt/qtbase.git;a=commitdiff;h=803bae5

The following commit has been merged in the ubuntu branch:
commit 803bae58f64a1a87d34d5f90390ffbebbfa8f2b9
Author: Timo Jyrinki <timo.jyrinki at canonical.com>
Date:   Thu Oct 13 13:22:05 2016 +0000

    debian/patches/Stop-unloading-plugins-in-QPluginLoader-and-QFactory.patch:
    
    * debian/patches/Stop-unloading-plugins-in-QPluginLoader-and-QFactory.patch:
      - Backport from Qt 5.8.
    
    (changelog entry may be changed later since this is still in PPA)
---
 debian/changelog                                   |  7 ++
 ...ing-plugins-in-QPluginLoader-and-QFactory.patch | 80 ++++++++++++++++++++++
 debian/patches/series                              |  1 +
 3 files changed, 88 insertions(+)

diff --git a/debian/changelog b/debian/changelog
index 70c37c8..b5c535b 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,10 @@
+qtbase-opensource-src (5.6.1+dfsg-3ubuntu7~2) yakkety; urgency=medium
+
+  * debian/patches/Stop-unloading-plugins-in-QPluginLoader-and-QFactory.patch:
+    - Backport from Qt 5.8.
+
+ -- Timo Jyrinki <timo-jyrinki at ubuntu.com>  Thu, 06 Oct 2016 07:18:59 +0000
+
 qtbase-opensource-src (5.6.1+dfsg-3ubuntu6~4) yakkety; urgency=medium
 
   [ Dmitry Shachnev ]
diff --git a/debian/patches/Stop-unloading-plugins-in-QPluginLoader-and-QFactory.patch b/debian/patches/Stop-unloading-plugins-in-QPluginLoader-and-QFactory.patch
new file mode 100644
index 0000000..aa93ed4
--- /dev/null
+++ b/debian/patches/Stop-unloading-plugins-in-QPluginLoader-and-QFactory.patch
@@ -0,0 +1,80 @@
+From 494376f980e96339b6f1eff7c41336ca4d853065 Mon Sep 17 00:00:00 2001
+From: Thiago Macieira <thiago.macieira at intel.com>
+Date: Thu, 12 Nov 2015 10:14:51 -0800
+Subject: [PATCH] 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
+Reviewed-by: Simon Hausmann <simon.hausmann at theqtcompany.com>
+Reviewed-by: Lars Knoll <lars.knoll at theqtcompany.com>
+---
+ 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 53b38c3..c820d53 100644
+--- a/src/corelib/plugin/qfactoryloader.cpp
++++ b/src/corelib/plugin/qfactoryloader.cpp
+@@ -203,10 +203,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 62067c7..4752f69 100644
+--- a/src/corelib/plugin/qpluginloader.cpp
++++ b/src/corelib/plugin/qpluginloader.cpp
+@@ -154,6 +154,7 @@ QPluginLoader::QPluginLoader(const QString &fileName, QObject *parent)
+     : QObject(parent), d(0), did_load(false)
+ {
+     setFileName(fileName);
++    setLoadHints(QLibrary::PreventUnloadHint);
+ }
+ 
+ /*!
+@@ -348,7 +349,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();
+@@ -394,7 +395,7 @@ QString QPluginLoader::errorString() const
+     rief 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.
+-- 
+2.9.3
+
diff --git a/debian/patches/series b/debian/patches/series
index 36febfa..303401b 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -22,6 +22,7 @@ dbustray_cleanup_notifier.diff
 Merge-the-QDBusMetaType-s-custom-information-to-QDBu.patch
 Fix-some-QtDBus-crashes-during-application-destructi.patch
 Make-the-bearer-QFactoryLoader-a-member-variable-not.patch
+Stop-unloading-plugins-in-QPluginLoader-and-QFactory.patch
 
 # Debian specific.
 gnukfreebsd.diff

-- 
qtbase packaging



More information about the pkg-kde-commits mailing list