Deregister QTextCodec on destruction
QTextCodec automatically deregisters on destruction now. [ChangeLog][QtCore][QTextCodec] QTextCodec automatically deregisters on destruction now. Task-number: QTBUG-56203 Change-Id: Ic9a66c512642c9913aa27ea5167b9f7341e7f0fe Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This commit is contained in:
parent
d4349f1acd
commit
03ab94b0e7
@ -492,6 +492,24 @@ QTextCodec::QTextCodec()
|
||||
*/
|
||||
QTextCodec::~QTextCodec()
|
||||
{
|
||||
QCoreGlobalData *globalData = QCoreGlobalData::instance();
|
||||
if (!globalData)
|
||||
return;
|
||||
|
||||
globalData->codecForLocale.testAndSetRelaxed(this, nullptr);
|
||||
|
||||
QMutexLocker locker(textCodecsMutex());
|
||||
|
||||
globalData->allCodecs.removeOne(this);
|
||||
|
||||
auto it = globalData->codecCache.cbegin();
|
||||
|
||||
while (it != globalData->codecCache.cend()) {
|
||||
if (it.value() == this)
|
||||
it = globalData->codecCache.erase(it);
|
||||
else
|
||||
++it;
|
||||
}
|
||||
}
|
||||
|
||||
/*!
|
||||
|
@ -55,7 +55,10 @@ QCoreGlobalData::~QCoreGlobalData()
|
||||
{
|
||||
#if QT_CONFIG(textcodec)
|
||||
codecForLocale = 0;
|
||||
for (QList<QTextCodec *>::const_iterator it = allCodecs.constBegin(); it != allCodecs.constEnd(); ++it)
|
||||
QList<QTextCodec *> tmp = allCodecs;
|
||||
allCodecs.clear();
|
||||
codecCache.clear();
|
||||
for (QList<QTextCodec *>::const_iterator it = tmp.constBegin(); it != tmp.constEnd(); ++it)
|
||||
delete *it;
|
||||
#endif
|
||||
}
|
||||
|
@ -2429,7 +2429,7 @@ void tst_QTextCodec::userCodec()
|
||||
QVERIFY(!QTextCodec::availableCodecs().contains("UserCodec"));
|
||||
QVERIFY(!QTextCodec::codecForName("UserCodec"));
|
||||
|
||||
QTextCodec *codec = new UserCodec;
|
||||
UserCodec *codec = new UserCodec;
|
||||
executedOnce = true;
|
||||
|
||||
QList<QByteArray> availableCodecs = QTextCodec::availableCodecs();
|
||||
@ -2448,6 +2448,11 @@ void tst_QTextCodec::userCodec()
|
||||
|
||||
pcodec = QTextCodec::codecForMib(5000);
|
||||
QCOMPARE(pcodec, codec);
|
||||
|
||||
delete codec;
|
||||
|
||||
pcodec = QTextCodec::codecForName("UserCodec");
|
||||
QCOMPARE(pcodec, nullptr);
|
||||
}
|
||||
|
||||
struct DontCrashAtExit {
|
||||
|
Loading…
Reference in New Issue
Block a user