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
This commit is contained in:
Martin T. H. Sandsmark 2020-04-07 17:14:59 +02:00
parent d868568d81
commit 35b4c6d4df

View file

@ -33,6 +33,9 @@
#include <QMimeData>
#include <QTimer>
#include <QWidget>
#include <QMutex>
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);
}