Hello community, here is the log from the commit of package libqt5-qtdeclarative for openSUSE:Factory checked in at 2016-06-25 01:56:01 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/libqt5-qtdeclarative (Old) and /work/SRC/openSUSE:Factory/.libqt5-qtdeclarative.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libqt5-qtdeclarative" Changes: -------- --- /work/SRC/openSUSE:Factory/libqt5-qtdeclarative/libqt5-qtdeclarative.changes 2016-06-21 15:32:34.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.libqt5-qtdeclarative.new/libqt5-qtdeclarative.changes 2016-06-25 01:56:02.000000000 +0200 @@ -2 +2 @@ -Tue Jun 21 09:53:21 UTC 2016 - lbeltr...@kde.org +Tue Jun 21 09:41:43 UTC 2016 - lbeltr...@kde.org @@ -5 +5,15 @@ - - Fix crashes with i686 and QML loader (boo#985768) + * Fix crash with i586 and QML loaders (boo#985768) + +------------------------------------------------------------------- +Thu Jun 16 15:39:26 UTC 2016 - hrvoje.sen...@gmail.com + +- Added qml_only_release_types_if_they_arent_referenced_anymore.patch + +------------------------------------------------------------------- +Wed Jun 8 14:15:15 UTC 2016 - hrvoje.sen...@gmail.com + +- Update to 5.6.1 + * For more details please see: + http://blog.qt.io/blog/2016/06/08/qt-5-6-1-released/ +- Drop upstreamed + Workaround-for-crashes-in-QtQml-code-relating-to-null-this-pointers.patch Old: ---- Workaround-for-crashes-in-QtQml-code-relating-to-null-this-pointers.patch qtdeclarative-opensource-src-5.6.0.tar.xz New: ---- qml_only_release_types_if_they_arent_referenced_anymore.patch qtdeclarative-opensource-src-5.6.1.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ libqt5-qtdeclarative.spec ++++++ --- /var/tmp/diff_new_pack.FdiqYI/_old 2016-06-25 01:56:04.000000000 +0200 +++ /var/tmp/diff_new_pack.FdiqYI/_new 2016-06-25 01:56:04.000000000 +0200 @@ -21,22 +21,22 @@ %define libname libQtQuick5 Name: libqt5-qtdeclarative -Version: 5.6.0 +Version: 5.6.1 Release: 0 Summary: Qt 5 Declarative Library License: SUSE-LGPL-2.1-with-digia-exception-1.1 or GPL-3.0 Group: Development/Libraries/X11 Url: http://qt.digia.com %define base_name libqt5 -%define real_version 5.6.0 -%define so_version 5.6.0 +%define real_version 5.6.1 +%define so_version 5.6.1 %define tar_version qtdeclarative-opensource-src-%{real_version} Source: %{tar_version}.tar.xz Source1: baselibs.conf # PATCH-FIX-OPENSUSE overflow.patch -- Statement might be overflowing a buffer Patch0: overflow.patch -# PATCH-FIX-UPSTREAM Workaround-for-crashes-in-QtQml-code-relating-to-null-this-pointers.patch -Patch1: Workaround-for-crashes-in-QtQml-code-relating-to-null-this-pointers.patch +# PATCH-FIX-UPSTREAM qml_only_release_types_if_they_arent_referenced_anymore.patch +Patch1: qml_only_release_types_if_they_arent_referenced_anymore.patch # PATCH-FIX-OPENSUSE: qtdeclarative-opensource-src-5.6.0-qml_no-lifetime-dse.patch - fix crashes with i586 and Plasma (boo #985768) Patch2: qtdeclarative-opensource-src-5.6.0-qml_no-lifetime-dse.patch BuildRequires: fdupes ++++++ overflow.patch ++++++ --- /var/tmp/diff_new_pack.FdiqYI/_old 2016-06-25 01:56:04.000000000 +0200 +++ /var/tmp/diff_new_pack.FdiqYI/_new 2016-06-25 01:56:04.000000000 +0200 @@ -1,13 +1,13 @@ --- a/src/qml/jsruntime/qv4value_p.h.orig 2015-08-23 09:15:03.157582462 +0200 +++ b/src/qml/jsruntime/qv4value_p.h 2015-08-23 09:19:46.516039994 +0200 -@@ -103,8 +103,8 @@ struct Q_QML_PRIVATE_EXPORT Value - #endif - - #ifdef QV4_USE_64_BIT_VALUE_ENCODING +@@ -123,8 +123,8 @@ struct Q_QML_PRIVATE_EXPORT Value + Q_ALWAYS_INLINE Heap::Base *m() const { Q_UNREACHABLE(); return Q_NULLPTR; } + Q_ALWAYS_INLINE void setM(Heap::Base *b) { Q_UNUSED(b); Q_UNREACHABLE(); } + #elif defined(QV4_USE_64_BIT_VALUE_ENCODING) - Q_ALWAYS_INLINE Heap::Base *m() const { Heap::Base *b; memcpy(&b, &_val, 8); return b; } - Q_ALWAYS_INLINE void setM(Heap::Base *b) { memcpy(&_val, &b, 8); } + Q_ALWAYS_INLINE Heap::Base *m() const { Heap::Base *b; memcpy(&b, &_val, QT_POINTER_SIZE); return b; } + Q_ALWAYS_INLINE void setM(Heap::Base *b) { memcpy(&_val, &b, QT_POINTER_SIZE); } #else // !QV4_USE_64_BIT_VALUE_ENCODING - Q_ALWAYS_INLINE Heap::Base *m() const { Heap::Base *b; quint32 v = value(); memcpy(&b, &v, 4); return b; } + Q_ALWAYS_INLINE Heap::Base *m() const { Q_STATIC_ASSERT(sizeof(Heap::Base*) == sizeof(quint32)); Heap::Base *b; quint32 v = value(); memcpy(&b, &v, 4); return b; } Q_ALWAYS_INLINE void setM(Heap::Base *b) { quint32 v; memcpy(&v, &b, 4); setValue(v); } ++++++ qml_only_release_types_if_they_arent_referenced_anymore.patch ++++++ >From 9b1231ca3d21ade574a8a7cf3f0805a8b520bcd5 Mon Sep 17 00:00:00 2001 From: Ulf Hermann <ulf.herm...@qt.io> Date: Wed, 8 Jun 2016 17:32:32 +0200 Subject: [PATCH] QML: Only release types if they aren't referenced anymore Just checking for references on m_compiledData is not enough. The actual component can also be referenced. Thus it won't be deleted on release(), but cannot be found in the type cache anymore. Task-number: QTBUG-53761 Change-Id: I8567af8e75a078598e4fed31e4717134e1332278 Reviewed-by: Mitch Curtis <mitch.cur...@qt.io> Reviewed-by: Simon Hausmann <simon.hausm...@qt.io> (cherry picked from commit 2ac19881f92c94f4e9427bd9ff513210675f259e) --- src/qml/qml/qqmltypeloader.cpp | 3 ++- tests/auto/qml/qqmltypeloader/tst_qqmltypeloader.cpp | 15 ++++++++++++--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/qml/qml/qqmltypeloader.cpp b/src/qml/qml/qqmltypeloader.cpp index c684c86..01200fd 100644 --- a/src/qml/qml/qqmltypeloader.cpp +++ b/src/qml/qml/qqmltypeloader.cpp @@ -1961,7 +1961,8 @@ void QQmlTypeLoader::trimCache() QList<TypeCache::Iterator> unneededTypes; for (TypeCache::Iterator iter = m_typeCache.begin(), end = m_typeCache.end(); iter != end; ++iter) { QQmlTypeData *typeData = iter.value(); - if (typeData->m_compiledData && typeData->m_compiledData->count() == 1) { + if (typeData->m_compiledData && typeData->count() == 1 + && typeData->m_compiledData->count() == 1) { // There are no live objects of this type unneededTypes.append(iter); } diff --git a/tests/auto/qml/qqmltypeloader/tst_qqmltypeloader.cpp b/tests/auto/qml/qqmltypeloader/tst_qqmltypeloader.cpp index 7045c7c..a1eaa05 100644 --- a/tests/auto/qml/qqmltypeloader/tst_qqmltypeloader.cpp +++ b/tests/auto/qml/qqmltypeloader/tst_qqmltypeloader.cpp @@ -86,10 +86,19 @@ void tst_QQMLTypeLoader::trimCache() url.setQuery(QString::number(i)); QQmlTypeData *data = loader.getType(url); - if (i % 5 == 0) // keep references to some of them so that they aren't trimmed - data->compiledData()->addref(); + // Run an event loop to receive the callback that release()es. + QTRY_COMPARE(data->count(), 2); - data->release(); + // keep references to some of them so that they aren't trimmed. References to either the + // QQmlTypeData or its compiledData() should prevent the trimming. + if (i % 10 == 0) { + // keep ref on data, don't add ref on data->compiledData() + } else if (i % 5 == 0) { + data->compiledData()->addref(); + data->release(); + } else { + data->release(); + } } for (int i = 0; i < 256; ++i) { -- 2.1.4 ++++++ qtdeclarative-opensource-src-5.6.0.tar.xz -> qtdeclarative-opensource-src-5.6.1.tar.xz ++++++ /work/SRC/openSUSE:Factory/libqt5-qtdeclarative/qtdeclarative-opensource-src-5.6.0.tar.xz /work/SRC/openSUSE:Factory/.libqt5-qtdeclarative.new/qtdeclarative-opensource-src-5.6.1.tar.xz differ: char 25, line 1