diff options
Diffstat (limited to 'nixpkgs/pkgs/development/libraries/qt-5/5.15/qtbase.patch.d/9999-backport-dbus-crash.patch')
-rw-r--r-- | nixpkgs/pkgs/development/libraries/qt-5/5.15/qtbase.patch.d/9999-backport-dbus-crash.patch | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/development/libraries/qt-5/5.15/qtbase.patch.d/9999-backport-dbus-crash.patch b/nixpkgs/pkgs/development/libraries/qt-5/5.15/qtbase.patch.d/9999-backport-dbus-crash.patch new file mode 100644 index 000000000000..e1aa0119aa2f --- /dev/null +++ b/nixpkgs/pkgs/development/libraries/qt-5/5.15/qtbase.patch.d/9999-backport-dbus-crash.patch @@ -0,0 +1,79 @@ +commit eb0c6846a5d05d686f0686f0f1ddddcad762ad26 (HEAD -> kde/5.15) +Author: K900 <me@0upti.me> +Date: Mon Aug 14 22:44:02 2023 +0300 + + QLibraryPrivate: Actually merge load hints + + Or old and new load hints in mergeLoadHints() instead of just storing + new ones. Andjust QLibraryPrivate::setLoadHints() to handle objects + with no file name differently and just set load hints directly. + + Mention that load hints are merged once the file name is set + in the documentation for QLibrary::setLoadHints(). + + Add a regression test into tst_qfactoryloader. + + Update and extend tst_QPluginLoader::loadHints() to take into account + load hints merging. + + Fixes: QTBUG-114480 + Change-Id: I3b9afaec7acde1f5ff992d913f8d7217392c7e00 + Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> + Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> + +diff --git a/src/corelib/plugin/qlibrary.cpp b/src/corelib/plugin/qlibrary.cpp +index 5d2f024267..45b5a3fe27 100644 +--- a/src/corelib/plugin/qlibrary.cpp ++++ b/src/corelib/plugin/qlibrary.cpp +@@ -526,7 +526,7 @@ void QLibraryPrivate::mergeLoadHints(QLibrary::LoadHints lh) + if (pHnd.loadRelaxed()) + return; + +- loadHintsInt.storeRelaxed(lh); ++ loadHintsInt.fetchAndOrRelaxed(lh); + } + + QFunctionPointer QLibraryPrivate::resolve(const char *symbol) +@@ -538,6 +538,13 @@ QFunctionPointer QLibraryPrivate::resolve(const char *symbol) + + void QLibraryPrivate::setLoadHints(QLibrary::LoadHints lh) + { ++ // Set the load hints directly for a dummy if this object is not associated ++ // with a file. Such object is not shared between multiple instances. ++ if (fileName.isEmpty()) { ++ loadHintsInt.storeRelaxed(lh); ++ return; ++ } ++ + // this locks a global mutex + QMutexLocker lock(&qt_library_mutex); + mergeLoadHints(lh); +@@ -1166,6 +1173,10 @@ QString QLibrary::errorString() const + lazy symbol resolution, and will not export external symbols for resolution + in other dynamically-loaded libraries. + ++ \note Hints can only be cleared when this object is not associated with a ++ file. Hints can only be added once the file name is set (\a hints will ++ be or'ed with the old hints). ++ + \note Setting this property after the library has been loaded has no effect + and loadHints() will not reflect those changes. + +diff --git a/src/corelib/plugin/qpluginloader.cpp b/src/corelib/plugin/qpluginloader.cpp +index 0a63b93762..ceee5d6385 100644 +--- a/src/corelib/plugin/qpluginloader.cpp ++++ b/src/corelib/plugin/qpluginloader.cpp +@@ -414,10 +414,11 @@ QString QPluginLoader::errorString() const + void QPluginLoader::setLoadHints(QLibrary::LoadHints loadHints) + { + if (!d) { +- d = QLibraryPrivate::findOrCreate(QString()); // ugly, but we need a d-ptr ++ d = QLibraryPrivate::findOrCreate({}, {}, loadHints); // ugly, but we need a d-ptr + d->errorString.clear(); ++ } else { ++ d->setLoadHints(loadHints); + } +- d->setLoadHints(loadHints); + } + + QLibrary::LoadHints QPluginLoader::loadHints() const |