diff --git a/src/libs/utils/mimetypes2/mimedatabase.cpp b/src/libs/utils/mimetypes2/mimedatabase.cpp index 8d9fd8a65ca..1bfa175468c 100644 --- a/src/libs/utils/mimetypes2/mimedatabase.cpp +++ b/src/libs/utils/mimetypes2/mimedatabase.cpp @@ -45,6 +45,7 @@ #include "mimeprovider_p.h" #include "mimetype_p.h" +#include "mimeutils.h" #include #include @@ -531,6 +532,10 @@ MimeType MimeDatabase::mimeTypeForName(const QString &nameOrAlias) const { QMutexLocker locker(&d->mutex); + if (d->m_startupPhase <= int(MimeStartupPhase::PluginsInitializing)) + qWarning("Accessing MimeDatabase for %s before plugins are initialized", + qPrintable(nameOrAlias)); + return d->mimeTypeForName(nameOrAlias); } @@ -566,6 +571,10 @@ MimeType MimeDatabase::mimeTypeForFile(const QFileInfo &fileInfo, MatchMode mode { QMutexLocker locker(&d->mutex); + if (d->m_startupPhase <= int(MimeStartupPhase::PluginsInitializing)) + qWarning("Accessing MimeDatabase for %s before plugins are initialized", + qPrintable(fileInfo.filePath())); + if (fileInfo.isDir()) return d->mimeTypeForName(QLatin1String("inode/directory")); @@ -619,6 +628,11 @@ MimeType MimeDatabase::mimeTypeForFile(const QString &fileName, MatchMode mode) { if (mode == MatchExtension) { QMutexLocker locker(&d->mutex); + + if (d->m_startupPhase <= int(MimeStartupPhase::PluginsInitializing)) + qWarning("Accessing MimeDatabase for %s before plugins are initialized", + qPrintable(fileName)); + const QStringList matches = d->mimeTypeForFileName(fileName); const int matchCount = matches.count(); if (matchCount == 0) { @@ -652,6 +666,10 @@ QList MimeDatabase::mimeTypesForFileName(const QString &fileName) cons { QMutexLocker locker(&d->mutex); + if (d->m_startupPhase <= int(MimeStartupPhase::PluginsInitializing)) + qWarning("Accessing MimeDatabase for %s before plugins are initialized", + qPrintable(fileName)); + const QStringList matches = d->mimeTypeForFileName(fileName); QList mimes; mimes.reserve(matches.count()); @@ -683,6 +701,9 @@ MimeType MimeDatabase::mimeTypeForData(const QByteArray &data) const { QMutexLocker locker(&d->mutex); + if (d->m_startupPhase <= int(MimeStartupPhase::PluginsInitializing)) + qWarning("Accessing MimeDatabase for data before plugins are initialized"); + int accuracy = 0; return d->findByData(data, &accuracy); } @@ -812,6 +833,9 @@ QList MimeDatabase::allMimeTypes() const { QMutexLocker locker(&d->mutex); + if (d->m_startupPhase <= int(MimeStartupPhase::PluginsInitializing)) + qWarning("Accessing MimeDatabase for all mime types before plugins are initialized"); + return d->allMimeTypes(); } diff --git a/src/libs/utils/mimetypes2/mimedatabase_p.h b/src/libs/utils/mimetypes2/mimedatabase_p.h index 69e3020d901..114661a06d7 100644 --- a/src/libs/utils/mimetypes2/mimedatabase_p.h +++ b/src/libs/utils/mimetypes2/mimedatabase_p.h @@ -116,6 +116,9 @@ private: public: const QString m_defaultMimeType; QMutex mutex; + + // added for Qt Creator + int m_startupPhase = 0; }; } // namespace Utils diff --git a/src/libs/utils/mimetypes2/mimeutils.cpp b/src/libs/utils/mimetypes2/mimeutils.cpp index 56a2d934771..0340366b440 100644 --- a/src/libs/utils/mimetypes2/mimeutils.cpp +++ b/src/libs/utils/mimetypes2/mimeutils.cpp @@ -94,11 +94,14 @@ QList allMimeTypes() void setMimeStartupPhase(MimeStartupPhase phase) { - // auto d = MimeDatabasePrivate::instance(); - // QMutexLocker locker(&d->mutex); - // if (int(phase) != d->m_startupPhase + 1) - // qWarning("Unexpected jump in MimedDatabase lifetime from %d to %d", d->m_startupPhase, int(phase)); - // d->m_startupPhase = int(phase); + auto d = MimeDatabasePrivate::instance(); + QMutexLocker locker(&d->mutex); + if (int(phase) != d->m_startupPhase + 1) { + qWarning("Unexpected jump in MimedDatabase lifetime from %d to %d", + d->m_startupPhase, + int(phase)); + } + d->m_startupPhase = int(phase); } void addMimeTypes(const QString &fileName, const QByteArray &data)