scope the lock in QTextCodec::codecForName() and QTextCodec::codecForMib()

Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
This commit is contained in:
Ivailo Monev 2021-02-13 12:29:39 +02:00
parent d93dae74af
commit fb43ed3879

View file

@ -459,25 +459,25 @@ QTextCodec *QTextCodec::codecForName(const QByteArray &name)
if (name == "System") if (name == "System")
return QTextCodec::codecForLocale(); return QTextCodec::codecForLocale();
{
#ifndef QT_NO_THREAD #ifndef QT_NO_THREAD
QMutexLocker locker(textCodecsMutex()); QMutexLocker locker(textCodecsMutex());
#endif #endif
for (int i = 0; i < qGlobalQTextCodec()->size(); ++i) {
for (int i = 0; i < qGlobalQTextCodec()->size(); ++i) { QTextCodec *cursor = qGlobalQTextCodec()->at(i);
QTextCodec *cursor = qGlobalQTextCodec()->at(i); if (nameMatch(cursor->name(), name)) {
if (nameMatch(cursor->name(), name)) {
return cursor;
}
foreach (const QByteArray &alias, cursor->aliases()) {
if (nameMatch(alias, name)) {
return cursor; return cursor;
} }
foreach (const QByteArray &alias, cursor->aliases()) {
if (nameMatch(alias, name)) {
return cursor;
}
}
} }
} }
foreach(const QByteArray &codec, QIcuCodec::allCodecs()) { foreach(const QByteArray &codec, QIcuCodec::allCodecs()) {
if (nameMatch(name, codec)) { if (nameMatch(name, codec)) {
locker.unlock();
return new QIcuCodec(name); return new QIcuCodec(name);
} }
} }
@ -492,20 +492,20 @@ QTextCodec *QTextCodec::codecForName(const QByteArray &name)
*/ */
QTextCodec* QTextCodec::codecForMib(int mib) QTextCodec* QTextCodec::codecForMib(int mib)
{ {
{
#ifndef QT_NO_THREAD #ifndef QT_NO_THREAD
QMutexLocker locker(textCodecsMutex()); QMutexLocker locker(textCodecsMutex());
#endif #endif
for (int i = 0; i < qGlobalQTextCodec()->size(); ++i) {
for (int i = 0; i < qGlobalQTextCodec()->size(); ++i) { QTextCodec *cursor = qGlobalQTextCodec()->at(i);
QTextCodec *cursor = qGlobalQTextCodec()->at(i); if (cursor->mibEnum() == mib) {
if (cursor->mibEnum() == mib) { return cursor;
return cursor; }
} }
} }
foreach(const int codec, QIcuCodec::allMibs()) { foreach(const int codec, QIcuCodec::allMibs()) {
if (mib == codec) { if (mib == codec) {
locker.unlock();
return new QIcuCodec(mib); return new QIcuCodec(mib);
} }
} }