From: Martin T. H. Sandsmark Date: Tue, 7 Apr 2020 15:14:59 +0000 (+0200) Subject: Fix crashing on starting and quitting X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/commitdiff_plain/35b4c6d4df1281afd621374e686f19e654ad7bae Fix crashing on starting and quitting QCollator (especially with Qt 5.14 and ICU 65.1) is very unhappy with threads. To avoid having to lock and unlock the mutex everywhere (and ensure it is unlocked before calling other things that might lock it, etc.), we do it as locally as possible. Even if for some reason Qt and ICU make QCollator threadsafe in the future locking here should have minimal impact. BUG: 419585 Differential Revision: https://phabricator.kde.org/D28659 --- diff --git a/src/kitemviews/kfileitemmodel.cpp b/src/kitemviews/kfileitemmodel.cpp index 4b35a0248..e4dca2734 100644 --- a/src/kitemviews/kfileitemmodel.cpp +++ b/src/kitemviews/kfileitemmodel.cpp @@ -33,6 +33,9 @@ #include #include #include +#include + +Q_GLOBAL_STATIC_WITH_ARGS(QMutex, s_collatorMutex, (QMutex::Recursive)) // #define KFILEITEMMODEL_DEBUG @@ -1878,6 +1881,8 @@ int KFileItemModel::sortRoleCompare(const ItemData* a, const ItemData* b, const int KFileItemModel::stringCompare(const QString& a, const QString& b, const QCollator& collator) const { + QMutexLocker collatorLock(s_collatorMutex()); + if (m_naturalSorting) { return collator.compare(a, b); }