diff options
author | Edward Welbourne <edward.welbourne@qt.io> | 2020-10-23 12:38:48 +0200 |
---|---|---|
committer | Edward Welbourne <edward.welbourne@qt.io> | 2020-11-08 13:00:24 +0100 |
commit | cc33b977ff680498d102fa4431a40ee841b0d341 (patch) | |
tree | e873fdc7540c0e60df465c08164ae571ebaa0ed7 /src/corelib/text | |
parent | 7d81f21d48dc6d70cf5429e899184acd9ce5f305 (diff) |
QLocale: Compare to &globalLocaleData instead of systemData()
Calling systemData() locks a mutex but the tests against its return
are just testing whether some m_data we're looking at is the
&globalLocaleData it's returning; any other m_data points into the
locale_data global array. So bypass the expensive mutex for these
tests and just compare against the pointer systemData() would be
returning.
Thanks to Andreas Buhr <andreas.buhr@qt.io> for the analysis that
showed the need for this.
Task-number: QTBUG-87330
Change-Id: Ib06233773511dc9d532cb4658319b6d589d17b56
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
Reviewed-by: MÃ¥rten Nordheim <marten.nordheim@qt.io>
Diffstat (limited to 'src/corelib/text')
-rw-r--r-- | src/corelib/text/qlocale.cpp | 68 |
1 files changed, 34 insertions, 34 deletions
diff --git a/src/corelib/text/qlocale.cpp b/src/corelib/text/qlocale.cpp index 45d4bd99fb..fd6f98c821 100644 --- a/src/corelib/text/qlocale.cpp +++ b/src/corelib/text/qlocale.cpp @@ -705,7 +705,7 @@ static uint defaultIndex() { const QLocaleData *const data = defaultData(); #ifndef QT_NO_SYSTEMLOCALE - if (data == systemData()) { + if (data == &globalLocaleData) { // Work out a suitable index matching the system data, for use when // accessing calendar data, when not fetched from system. return QLocaleData::findLocaleIndex(data->id()); @@ -781,7 +781,7 @@ static QLocalePrivate *findLocalePrivate(QLocale::Language language, QLocale::Sc QString QLocaleData::decimalPoint() const { #ifndef QT_NO_SYSTEMLOCALE - if (this == systemData()) { + if (this == &globalLocaleData) { auto res = systemLocale()->query(QSystemLocale::DecimalPoint).toString(); if (!res.isEmpty()) return res; @@ -794,7 +794,7 @@ QString QLocaleData::groupSeparator() const { // Empty => don't do grouping #ifndef QT_NO_SYSTEMLOCALE - if (this == systemData()) { + if (this == &globalLocaleData) { QVariant res = systemLocale()->query(QSystemLocale::GroupSeparator); if (!res.isNull()) return res.toString(); @@ -816,7 +816,7 @@ QString QLocaleData::listSeparator() const QString QLocaleData::zeroDigit() const { #ifndef QT_NO_SYSTEMLOCALE - if (this == systemData()) { + if (this == &globalLocaleData) { auto res = systemLocale()->query(QSystemLocale::ZeroDigit).toString(); if (!res.isEmpty()) return res; @@ -828,7 +828,7 @@ QString QLocaleData::zeroDigit() const char32_t QLocaleData::zeroUcs() const { #ifndef QT_NO_SYSTEMLOCALE - if (this == systemData()) { + if (this == &globalLocaleData) { const auto text = systemLocale()->query(QSystemLocale::ZeroDigit).toString(); if (!text.isEmpty()) { if (text.size() == 1 && !text.at(0).isSurrogate()) @@ -844,7 +844,7 @@ char32_t QLocaleData::zeroUcs() const QString QLocaleData::negativeSign() const { #ifndef QT_NO_SYSTEMLOCALE - if (this == systemData()) { + if (this == &globalLocaleData) { auto res = systemLocale()->query(QSystemLocale::NegativeSign).toString(); if (!res.isEmpty()) return res; @@ -856,7 +856,7 @@ QString QLocaleData::negativeSign() const QString QLocaleData::positiveSign() const { #ifndef QT_NO_SYSTEMLOCALE - if (this == systemData()) { + if (this == &globalLocaleData) { auto res = systemLocale()->query(QSystemLocale::PositiveSign).toString(); if (!res.isEmpty()) return res; @@ -1087,7 +1087,7 @@ QLocale::NumberOptions QLocale::numberOptions() const QString QLocale::quoteString(QStringView str, QuotationStyle style) const { #ifndef QT_NO_SYSTEMLOCALE - if (d->m_data == systemData()) { + if (d->m_data == &globalLocaleData) { QVariant res; if (style == QLocale::AlternateQuotation) res = systemLocale()->query(QSystemLocale::StringToAlternateQuotation, @@ -1122,7 +1122,7 @@ QString QLocale::createSeparatedList(const QStringList &list) const { // May be empty if list is empty or sole entry is empty. #ifndef QT_NO_SYSTEMLOCALE - if (d->m_data == systemData()) { + if (d->m_data == &globalLocaleData) { QVariant res = systemLocale()->query(QSystemLocale::ListToSeparatedString, QVariant::fromValue(list)); @@ -1818,7 +1818,7 @@ QString QLocale::toString(QDate date, FormatType format) const return QString(); #ifndef QT_NO_SYSTEMLOCALE - if (d->m_data == systemData()) { + if (d->m_data == &globalLocaleData) { QVariant res = systemLocale()->query(format == LongFormat ? QSystemLocale::DateToStringLong : QSystemLocale::DateToStringShort, @@ -1919,7 +1919,7 @@ QString QLocale::toString(QDate date, QLocale::FormatType format, QCalendar cal) return QString(); #ifndef QT_NO_SYSTEMLOCALE - if (cal.isGregorian() && d->m_data == systemData()) { + if (cal.isGregorian() && d->m_data == &globalLocaleData) { QVariant res = systemLocale()->query(format == LongFormat ? QSystemLocale::DateToStringLong : QSystemLocale::DateToStringShort, @@ -1940,7 +1940,7 @@ QString QLocale::toString(const QDateTime &dateTime, QLocale::FormatType format, return QString(); #ifndef QT_NO_SYSTEMLOCALE - if (cal.isGregorian() && d->m_data == systemData()) { + if (cal.isGregorian() && d->m_data == &globalLocaleData) { QVariant res = systemLocale()->query(format == LongFormat ? QSystemLocale::DateTimeToStringLong : QSystemLocale::DateTimeToStringShort, @@ -1975,7 +1975,7 @@ QString QLocale::toString(const QDateTime &dateTime, FormatType format) const return QString(); #ifndef QT_NO_SYSTEMLOCALE - if (d->m_data == systemData()) { + if (d->m_data == &globalLocaleData) { QVariant res = systemLocale()->query(format == LongFormat ? QSystemLocale::DateTimeToStringLong : QSystemLocale::DateTimeToStringShort, @@ -2001,7 +2001,7 @@ QString QLocale::toString(QTime time, FormatType format) const return QString(); #ifndef QT_NO_SYSTEMLOCALE - if (d->m_data == systemData()) { + if (d->m_data == &globalLocaleData) { QVariant res = systemLocale()->query(format == LongFormat ? QSystemLocale::TimeToStringLong : QSystemLocale::TimeToStringShort, @@ -2030,7 +2030,7 @@ QString QLocale::toString(QTime time, FormatType format) const QString QLocale::dateFormat(FormatType format) const { #ifndef QT_NO_SYSTEMLOCALE - if (d->m_data == systemData()) { + if (d->m_data == &globalLocaleData) { QVariant res = systemLocale()->query(format == LongFormat ? QSystemLocale::DateFormatLong : QSystemLocale::DateFormatShort, @@ -2061,7 +2061,7 @@ QString QLocale::dateFormat(FormatType format) const QString QLocale::timeFormat(FormatType format) const { #ifndef QT_NO_SYSTEMLOCALE - if (d->m_data == systemData()) { + if (d->m_data == &globalLocaleData) { QVariant res = systemLocale()->query(format == LongFormat ? QSystemLocale::TimeFormatLong : QSystemLocale::TimeFormatShort, @@ -2092,7 +2092,7 @@ QString QLocale::timeFormat(FormatType format) const QString QLocale::dateTimeFormat(FormatType format) const { #ifndef QT_NO_SYSTEMLOCALE - if (d->m_data == systemData()) { + if (d->m_data == &globalLocaleData) { QVariant res = systemLocale()->query(format == LongFormat ? QSystemLocale::DateTimeFormatLong : QSystemLocale::DateTimeFormatShort, @@ -2708,7 +2708,7 @@ QString QGregorianCalendar::monthName(const QLocale &locale, int month, int year QLocale::FormatType format) const { #ifndef QT_NO_SYSTEMLOCALE - if (locale.d->m_data == systemData()) { + if (locale.d->m_data == &globalLocaleData) { Q_ASSERT(month >= 1 && month <= 12); QVariant res = systemLocale()->query(format == QLocale::LongFormat ? QSystemLocale::MonthNameLong @@ -2734,7 +2734,7 @@ QString QGregorianCalendar::standaloneMonthName(const QLocale &locale, int month QLocale::FormatType format) const { #ifndef QT_NO_SYSTEMLOCALE - if (locale.d->m_data == systemData()) { + if (locale.d->m_data == &globalLocaleData) { Q_ASSERT(month >= 1 && month <= 12); QVariant res = systemLocale()->query(format == QLocale::LongFormat ? QSystemLocale::StandaloneMonthNameLong @@ -2757,7 +2757,7 @@ QString QCalendarBackend::weekDayName(const QLocale &locale, int day, return QString(); #ifndef QT_NO_SYSTEMLOCALE - if (locale.d->m_data == systemData()) { + if (locale.d->m_data == &globalLocaleData) { QVariant res = systemLocale()->query(format == QLocale::LongFormat ? QSystemLocale::DayNameLong : QSystemLocale::DayNameShort, @@ -2777,7 +2777,7 @@ QString QCalendarBackend::standaloneWeekDayName(const QLocale &locale, int day, return QString(); #ifndef QT_NO_SYSTEMLOCALE - if (locale.d->m_data == systemData()) { + if (locale.d->m_data == &globalLocaleData) { QVariant res = systemLocale()->query(format == QLocale::LongFormat ? QSystemLocale::DayNameLong : QSystemLocale::DayNameShort, @@ -2800,7 +2800,7 @@ QString QCalendarBackend::standaloneWeekDayName(const QLocale &locale, int day, Qt::DayOfWeek QLocale::firstDayOfWeek() const { #ifndef QT_NO_SYSTEMLOCALE - if (d->m_data == systemData()) { + if (d->m_data == &globalLocaleData) { const auto res = systemLocale()->query(QSystemLocale::FirstDayOfWeek); if (!res.isNull()) return static_cast<Qt::DayOfWeek>(res.toUInt()); @@ -2828,7 +2828,7 @@ QLocale::MeasurementSystem QLocalePrivate::measurementSystem() const QList<Qt::DayOfWeek> QLocale::weekdays() const { #ifndef QT_NO_SYSTEMLOCALE - if (d->m_data == systemData()) { + if (d->m_data == &globalLocaleData) { auto res = qvariant_cast<QList<Qt::DayOfWeek> >(systemLocale()->query(QSystemLocale::Weekdays)); if (!res.isEmpty()) @@ -2854,7 +2854,7 @@ QList<Qt::DayOfWeek> QLocale::weekdays() const QLocale::MeasurementSystem QLocale::measurementSystem() const { #ifndef QT_NO_SYSTEMLOCALE - if (d->m_data == systemData()) { + if (d->m_data == &globalLocaleData) { const auto res = systemLocale()->query(QSystemLocale::MeasurementSystem); if (!res.isNull()) return MeasurementSystem(res.toInt()); @@ -2967,7 +2967,7 @@ QString QLocale::toLower(const QString &str) const QString QLocale::amText() const { #ifndef QT_NO_SYSTEMLOCALE - if (d->m_data == systemData()) { + if (d->m_data == &globalLocaleData) { auto res = systemLocale()->query(QSystemLocale::AMText).toString(); if (!res.isEmpty()) return res; @@ -2987,7 +2987,7 @@ QString QLocale::amText() const QString QLocale::pmText() const { #ifndef QT_NO_SYSTEMLOCALE - if (d->m_data == systemData()) { + if (d->m_data == &globalLocaleData) { auto res = systemLocale()->query(QSystemLocale::PMText).toString(); if (!res.isEmpty()) return res; @@ -3926,7 +3926,7 @@ qulonglong QLocaleData::bytearrayToUnsLongLong(const char *num, int base, bool * QString QLocale::currencySymbol(QLocale::CurrencySymbolFormat format) const { #ifndef QT_NO_SYSTEMLOCALE - if (d->m_data == systemData()) { + if (d->m_data == &globalLocaleData) { auto res = systemLocale()->query(QSystemLocale::CurrencySymbol, format).toString(); if (!res.isEmpty()) return res; @@ -3958,7 +3958,7 @@ QString QLocale::currencySymbol(QLocale::CurrencySymbolFormat format) const QString QLocale::toCurrencyString(qlonglong value, const QString &symbol) const { #ifndef QT_NO_SYSTEMLOCALE - if (d->m_data == systemData()) { + if (d->m_data == &globalLocaleData) { QSystemLocale::CurrencyToStringArgument arg(value, symbol); auto res = systemLocale()->query(QSystemLocale::CurrencyToString, QVariant::fromValue(arg)).toString(); @@ -3985,7 +3985,7 @@ QString QLocale::toCurrencyString(qlonglong value, const QString &symbol) const QString QLocale::toCurrencyString(qulonglong value, const QString &symbol) const { #ifndef QT_NO_SYSTEMLOCALE - if (d->m_data == systemData()) { + if (d->m_data == &globalLocaleData) { QSystemLocale::CurrencyToStringArgument arg(value, symbol); auto res = systemLocale()->query(QSystemLocale::CurrencyToString, QVariant::fromValue(arg)).toString(); @@ -4013,7 +4013,7 @@ QString QLocale::toCurrencyString(qulonglong value, const QString &symbol) const QString QLocale::toCurrencyString(double value, const QString &symbol, int precision) const { #ifndef QT_NO_SYSTEMLOCALE - if (d->m_data == systemData()) { + if (d->m_data == &globalLocaleData) { QSystemLocale::CurrencyToStringArgument arg(value, symbol); auto res = systemLocale()->query(QSystemLocale::CurrencyToString, QVariant::fromValue(arg)).toString(); @@ -4122,7 +4122,7 @@ QStringList QLocale::uiLanguages() const QStringList uiLanguages; QList<QLocale> locales; #ifndef QT_NO_SYSTEMLOCALE - if (d->m_data == systemData()) { + if (d->m_data == &globalLocaleData) { const auto uiLanguages = systemLocale()->query(QSystemLocale::UILanguages).toStringList(); // ... but we need to include likely-adjusted forms of each of those, too: for (const auto &entry : uiLanguages) @@ -4191,7 +4191,7 @@ QStringList QLocale::uiLanguages() const QLocale QLocale::collation() const { #ifndef QT_NO_SYSTEMLOCALE - if (d->m_data == systemData()) { + if (d->m_data == &globalLocaleData) { const auto res = systemLocale()->query(QSystemLocale::Collation).toString(); if (!res.isEmpty()) return QLocale(res); @@ -4211,7 +4211,7 @@ QLocale QLocale::collation() const QString QLocale::nativeLanguageName() const { #ifndef QT_NO_SYSTEMLOCALE - if (d->m_data == systemData()) { + if (d->m_data == &globalLocaleData) { auto res = systemLocale()->query(QSystemLocale::NativeLanguageName).toString(); if (!res.isEmpty()) return res; @@ -4231,7 +4231,7 @@ QString QLocale::nativeLanguageName() const QString QLocale::nativeCountryName() const { #ifndef QT_NO_SYSTEMLOCALE - if (d->m_data == systemData()) { + if (d->m_data == &globalLocaleData) { auto res = systemLocale()->query(QSystemLocale::NativeCountryName).toString(); if (!res.isEmpty()) return res; |